@main 이란? @main 은 Swift 5.3 버전 부터 사용하는 키워드다. Swift5.3 이전 버전에서는 @UIApplicationMain 키워드를 사용했다. 공식 문서에 따르면 @main은 타입 기반의 프로그램 진입점 이라 설명한다. 프로그램 실행을 시작하기 위한 진입점으로 타입을 지정하는 Swift 언어 기능이라 한다. 보통 AppDelegate Class 에서 볼수있는데 AppDelegate는 앱이 시작되는 진입점을 알려주고, 앱의 입력 이벤트를 전달하는 런루프를 생성하는 역할을 한다. 공식문서의 소개를 보면 탑레벨의 코드를 작성하는 대신 사용자는 싱글 타입에 @main 속성을 사용할 수 있다고 설명한다. Top-Level Code란? Top-Level Code 에는 선언문(Top-Level..
Clean Architecture Clean Architecture란? 클린 아케틱처는 Uncle Bob이 2012년 엔터 프라이즈 아키텍처에서 논의 되던 내용을 집약 시킨 개념이다. 클린 아키텍처는 두가지 관점에서 볼 수 있다. 아키텍처 설계의 철학과 원칙 SOLID원칙을 중심으로 SW설계에서 중요하게 거론되어온 다양한 원칙들을 일목요연하게 정리한다. 과녁 그림으로 유명한 아키텍처의 청사진. 이는 Hexagonal Architecture, Onion Architecture 등 당시 널리 알려진 아키텍처들의 공통된 설과물을 정리한것이다. 모바일 부터 백엔드 까지 모든 소프트웨어에 일반적으로 필요한 내용을 담고 있으며, 각 계층을 어떻게 나누고 어떤 요소로 구성할 것인가에 대한 원칙들을 알려준다. 가운데로..
Protocol과 Generic 의 Swift6 (Existential any) 이번글은 업데이트될 Swift6 를 위해 공부한 자료입니다. Existential Type 이란? 직역 하자면 실존 타입 으로 우리가 게속 사용했던 개념이다. Swift Documents- Protocol 문서의 Protocols as Types 파트 도입부를 읽어보면 다음과같이 설명되어있다. Using a protocol as a type is sometimes called an existential type 프로토콜을 타입으로 사용하는 것은 existential type 이라고 불리기도한다. 아래의 예시 코드는 existential type 을 활용한 예시 코드. protocol Pet { func eat() } stru..
Swift Generics Generics 제너릭 코드 (Generic code) 는 정의한 요구사항에 따라 모든 타입에서 동작할 수 있는 유연하고 재사용 가능한 함수와 타입을 작성할 수 있다. 이는 중복을 피하고 명확하고 추상적인 방식으로 의도를 표현하는 코드를 작성할 수 있습니다. 제네릭은 Swift의 가장 강력한 기능 중 하나이고 Swift 표준 라이브러이의 대부분은 제네릭 코드로 빌드 된다. 예를 들어 Swift의 Array, Dictionary 타입은 모두 제네릭 컬렉션이다. 즉 Array에 Int, String 등 모든 타입을 저장할 수 있는 이유가 제네릭 타입이기 때문이다. 따라서 저장되는 타입에 제한이 없는 것이다. The Problem That Generics Solve 아래의 예시 코드..
Realm Realm: 대용량 DB 버전 호환성 iOS 8 이상 Xcode 7.3 이상 Xcode 14 이상 사용시 ios 11이상 장점: SQLite와 CoreData보다 작업 속도가 빠르다. Realm Studio를 통해서 DB 상태를 편하게 확인할 수 있다. 직관적인 코드로 작업할 수 있다. Rx를 지원하는 RxRealm이 존재한다. 높은 용량을 요구하고 보통 대용량 데이터를 다룰 때 사용한다고 한다. 단점: 바이너리 용량이 늘어남 main thread 이용하고 있는데 다른 thread 접근하면 에러남. 그래서 사용할 때 스레드 지정해줘야 함 다양한 쿼리를 지원하지 않음 iOS8부터 지원가능 Realm이란?? Realm은 모바일에 특화된 NoSQL 데이터 베이스로 Swift, Objective-C,..
RxSwift Transforming Operators Transforming Operators Observable을 변형하는 Operator .toArray() Observable의 독립적 요소들을 array로 넣는 가장 편리한 방법은 toArray를 사용하는 것이다. let disposeBag = DisposeBag() Observable.of("A", "B", "C") .toArray() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 요녀석은 array로 바뀐다고했다. 출력은 요렇게! ["A", "B", "C"] .map() RxSwift의 map 연산자는 Observable 에서 동작한다는 점만 제외하면 Swift 표준 라이브러리의 ma..
Design Pattern(디자인 패턴) 디자인 패턴이란? 프로그래밍 설계를 할때 자주 발생하는 문제들을 해결하기 위해 사용되는 패턴, 구조 라고 할 수 있다. 디자인 패턴을 공부하다 보면 '아 이게 패턴이었어?' 라는 생각이 드는 순간이 있다. 디자인 패턴이라는 것이 정형화된 어떤 기술이 아니기 때문이다. 오래도록 경험이 축척되어 널리 굳혀진 방법론 일 뿐이며 누군가는 디자인 패턴을 선배들의 삽질 기록물 이라고 하는 이유가 그것이다. 디자인 패턴의 장점 객체지향 프로그래밍의 다양한 문제를 해결 혹은 더 나은 방법 을 제시해준다. 비슷한 상황에서 효과적으로 문제를 해결해오던 패턴이기 떄문에 쉽고 빠르게 해결책을 찾을수 있다. 디자인 패턴은 프로그래머 사이의 협업 효율과 의사소통을 증진시켜준..
Coordinator 패턴 iOS에서는 화면 전환을 담당하는 컨트롤러인 UINavigationController가 있다. Stack방식으로 새로운 화면을 push혹은 present하고, 이전 화면으로 돌아가기 위해 pop혹은 dissmis 한다. 가장 첫 화면을 기준으로 새로운 화면으로 넘어갈때 마다 하나씩 쌓이게 되고 뒤로가기 버튼을 통해 이전에 방문했던 화면들을 순서대로 꺼낼게된다. navigationController?.pushviewController(nextViewController, animated:true) 요렇게 제공되는 메서드를 사용해 간단하게 화면을 전환할수 있지만 앱이 커지고 화면이 많아진다면 사용하기 버거워진다. 예를 들어 화면을 전환하는 메서드가 모든 뷰마다 존재한다던지 하는 중복..