분류 전체보기

    [Clean Architecture] SOLID원칙 02. SRP(Single Responsibility Principle) 단일 책임 원칙

    SRP(Single Responsibility Principle) 개념 하나의 객체는 하나의 책임을 가져야 한다. 즉 하나의 class가 여러 기능을 담당하면 안된다. 예제코드 class LoginService { func login(id: String, pw: String) { let userData = requestLogin() let user = decodeUserInform(data: userData) saveUserOnDatabase(user: user) } private func requestLogin() -> Data { // Call API return Data() } private func decodeUserInform(data: Data) -> User { // Decoding User..

    [Clean Architecture] SOLID원칙 01. 클래스 다이어그램 표현

    https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0/chapters/2-how-to-read-a-class-diagram Class Disagram 클래스 다이어그램은 엔지니어링의 청사진이다. 그림, 기호 및 주석을 통해 시스템에 대한 정보를 제공한다. 클래스 다이어그램, 아키텍쳐 도면 및 시스템 일러스트레이션을 만들기 위한 UML(Unified Modeling Language)에 대해 간단히 정리한다. 클래스 다이어그램에는 무엇이 있는가? 클래스 다이어그램에는 클래스, 프로토콜, 속성, 메서드 및 관계가 포함된다. 클래스 네모는 클래스를 나타낸다. 아래는 매우 간단한 클래스(Dog) 다이어그램이다. 상속 관계 한 클래스가 다른 클..

    [iOS] Clean Architecture

    https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3 Clean Architecture and MVVM on iOS When we develop software it is important to not only use design patterns, but also architectural patterns. There are many different… tech.olx.com 클린아키텍처에 대해 공부해보려한다. 모든 소스코드와 내용은 상단 글의 번역과 정리를 토대로 한 내용입니다. 클린아키텍처(Clean Architecture)? 소프트웨어를 개발할 때 디자인 패턴 뿐 아니라 아키텍처 패턴도 사용하는 것이 중요하다. 소프트웨어 엔지니어링..

    [Swift] 메타타입(Metatype)

    메타타입 메타타입이란 타입의 타입이다. 클래스의 타입, 구조체의 타입, 열거형 타입, 프로토콜의 타입도 메타타입이다. 어떤 클래스 SomeClass의 메타타입은 SomeClass.Type이다. 어떤 프로토콜 SomeProtocol의 메타타입은 SomeProtocol.Protocol이다. 어떤 타입에 .self를 붙이면 해당 타입을 어떤 값으로 접근할 수 있다. 예를 들어 SomeClass.self는 SomeClass의 인스턴스를 리턴하는게 아니라 SomeClass 라는 것 자체를 리턴한다.(프로토콜도 마찬가지)

    [iOS] UIResponder

    Xcode 프로젝트를 만들면 AppDelegate와 SceneDelegate가 존재한다 이 클래스는 UIResponder를 상속받게된다. https://developer.apple.com/documentation/uikit/uiresponder UIResponder | Apple Developer Documentation An abstract interface for responding to and handling events. developer.apple.com 이벤트에 응답하고 처리하기 위한 추상 인터페이스이다. UIResponder는 터치, 동작 및 키보드 이벤트와 같은 사용자 이벤트에 응답하는 개체의 기본 클래스이다. 즉 애플리케이션의 뷰 계층 구조에 있는 개체로 이벤트를 처리하고 전달하는 역할을..

    [iOS] NSObject

    iOS의 Cocoa는 NSObject를 상속받는 모든 클래스를 가리키는 단어이다. 따라서 CocoaTouch프레임워크란 iOS환경을 구축하기위한 최상위 프레임워크이며 일반적으로 옵씨에서의 NSObject와 스위프트에서 사용되는 UIKit, Foundation 등에 포함되는 대부분의 클래스가 여기에서 속한다. NSObject는 Objective-C 및 Swift 프로그래밍 언어의 기본 클래스이며 해당 언어에서 대부분의 다른 클래스의 루트 클래스 역할을 한다. UIButton은 UIControl을 상속하고, UIView는 UIResponder, UIResponder는 NSObject를 상속한다. NSObject는 어플리케이션의대부분의 객체에 필요한 기본 동작을 정의하는 클래스이다. 객체를 생성, 복사, 비교..

    [iOS] Core Data는 무엇인가.

    코어데이터 코어데이터란 넓은 의미에서 앱의 모델계층이자, 데이터베이스, ORM등의 기능을 가진 객체 그래프 관리 프레임워크이다. CoreData는 경량의 고성능 관계형 데이터베이스 엔진인 SQLite를 기반으로 구축되었고 개발자가 복잡한 SQL문을 작성하지 않고도 데이터베이스와 상호작용 할 수 있도록 직관적이고 사용하기 쉬운 인터페이스를 제공한다. 객체 그래프 관리 프레임워크 객체 그래프란 메모리에 있는 객체들과 객체들 간의 관계를 말한다. 예를 들어 Person이라는 객체와 Family라는 객체가 이와 같은 관계로 메모리에 올라간다면 객체들이 어떤 관계를 갖고 있는지를 객체 그래프라고 하는 것이다. 예를 들어 실제 앱의 예시로 보자면 SNS앱에서 게시글이 있고, 게시글에는 댓글들이 있을텐데 두 객체의 ..

    [iOS] - Realm을 활용한 Widget(위젯)

    Realm과 Widget(위젯) WWDC 에선 Personalized하고 glanceable한 위젯이 좋은 위젯이라고 한다. personalized한 위젯이란? 날씨 위젯처럼 개인이 사는 지역마다 다른 정보를 알려줘야한다. 이런 개인에 따라 맞춤 정보를 제공하는 것을 Personalized라고 한다. glanceable한 위젯이란? 어떤 동작을 하지 않아도 바로 간편하게 원하는 정보를 확인할 수 있는 것을 glanceable한 위젯이라고 한다. WWDC에서 강조한 부분은 위젯은 작은 앱이 아님(Widget are not mini-apps)이다. 위젯은 사용자가 필요한 정보를 볼 수 있게 해주는 전광판이라고한다. 하지만 여러 위젯들을 보면 아래처럼 버튼이 있는 것을 볼 수 있는데 실질적으론 위젯 내부에서 ..

    RxSwift - Single, Maybe, Completable

    Single, Maybe, Completable은 다른 옵저버블보다 좁은 범위의 옵저버블이다. 선택적으로 사용할 수 있는데, 이런 좁은범위의 옵저버블을 사용하는 이유는 코드 가독성을 높이는데 있다. Single Single은 두가지 이벤트만 방출한다. .success(): next event와 complete 를 합친것과 같다. 값을 포함해서 방출한다. .error() 파일 저장이나 다운로드, 디스크에서 데이터 로딩과 같이 기본적으로 값을 산출하는 비동기적 연산에 사용되게된다. 사진을 저장하는 옵저버블이 있을 때 저장을 했느냐, 에러가 났느냐 처럼 정확히 한가지 요소만을 방출하는 연산자를 매핑할 때 유용하다. 정확히 한가지 요소만을 방출할 수 있다. NextEvent와 Completed Event를 합친..

    [iOS] Realm과 사용법

    Realm이란? 오픈소스이며 모바일에 최적화된 라이브러리이다. 객체지향 데이터베이스로, iOS, Android, React Native등 다양한 플랫폼에서 사용할 수 있으며 로컬에 저장된다. UserDefault는 간단한 데이터만 저장하는 용도이다(id, pw, 간단한 설정과 같은..) 큰 용량을 저장하기엔 무리가있다. ORM이 아닌 *데이터 컨테이너 모델을 사용하고 데이터 객체는 Realm에 객체로 저장된다. *컨테이너가 뭘까. 컨테이너란 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션등을 하나로 모아, 별도의 서버인 것처럼 사용할 수 있게 만든것이다. OS의 리소스를 논리적으로 분리시키고 여러개의 컨테이너가 공유하여 사용한다. 컨테이너는 오버..