iOS/Swift 문법(6)
-
Using Existential and Generic feat.Dispatch
Tuist를 통한 모듈화를 하면서 build 최적화에 관심을 가지게 되었다. 그 중에 하나가 static dispatch와 dynamic dispatch이다.단순하게는 class 선언 시 final을 붙이거나, property에서 private을 붙여 최적화하는 정도만 알았다.다음의 짧은 아티클을 보면서 Protocol을 통한 type 선언 시, dynamic dispatch가 되는 상황을 알아보자!ProtocolSwift는 protocol을 통해 기능과 특징을 정의할 수 있다. 아래는 polinator 역할을 protocol로 정의하고, Insect와 Bee가 이 역할을 수행하는 예시이다.protocol Pollinator { func pollinate(_ plant: String)}struct ..
2024.09.17 -
복잡한 JSON 디코딩하기 - NestedContainer, custom init
1. 복잡한 JSON Model이전에는 quick.io에서 무지성 JSON 복붙으로 모델을 만들었는데, 디코딩 커스텀하는 좋은 예시가 있어서 공유해본다.위의 GeoJSON은 type, metadata, features, bbox라는 4개의 키를 가진 JSON 모델이다. 각각의 키값은 단일 값일 수도, 배열일 수도, 다른 오브젝트를 자식으로 가질 수 있다.우리는 earthquake만을 필요하기 때문에 전체를 디코딩하기 보다는 features 키안의 필요한 값만 디코딩해볼 것이다.Keyed Contaienr and UnKeyed ConatinerContainer는 Keyed 또는 UnKeyd이다. 일반적으로 우리가 써왔던 유일한 값들은 Keyed이다. 반면, UnKeyed는 unnamed element로,..
2024.09.17 -
면접 질문: Closure에서 weak self를 사용하지 않아도 되는 경우?
이 말은 달리 말하면 순환 참조가 일어나는 경우는 언제냐는 질문과 같다. 순환 참조는 두 인스턴스가 서로 강한 참조할 때 발생하고, 메모리 해제되지 않아 누수가 발생한다. swift에서는 이를 회피하기 위해 캡처리스트를 이용한다. 캡처 리스트에서 weak 또는 unowned self를 사용할 수 있다.TL;DL클로저의 생명 주기가 self보다 짧거나 동시에 해제되는 경우 사용하지 않아도 된다.weak self를 사용하는 경우클로저가 self를 강하게 참조하고, 그 클로저가 self의 프로퍼티로 저장되거나 self가 클로저와 긴밀하게 연결되는 경우콜백, 타이머, 네트워크 요청과 같은 비동기 작업에서 weak self를 사용한다.class SomeClass { var completionHandler: ((..
2024.09.08 -
Map과 FlatMap, CompactMap
스위프트는 함수를 일급 객체(First class)로 취급하기 때문에 함수를 다른 함수의 전달인자로 사용할 수 있다. 매개 변수로 함수를 갖는 함수를 고차 함수(Higer order function)라고 한다. 이와 같은 함수 고차함수를 사용하는 이유는 다음과 같다 코드의 재사용 컴파일러 최적화 다중 스레드 환경 시 안전함 책과 블로그를 통해서 개념이 잘 와닿지 않는 다면 문제를 풀어보는 것도 좋은 방법이다. 고차 함수를 이용해서 코드 작성해본다면 왜 쓰는지, 어떤 의미인지 알게 될 것이다. 클로저에서 파라미터와 반환 타입과 return 키워드는 생략이 가능하다. Map 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수 Sequence와 Collection 프로토콜을 따르는 타입과 옵셔널..
2022.03.21 -
iOS XCTest 코드 (1)
먼저 CI / CD, iOS앱의 배포 과정 그리고 툴들에 대해 간략히 알아보자 CI / CD - Continuous Integration 지속적 통합 / Continouous Distribution 지속적 배포 CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다. 특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링하는 것입니다. 이러한 구축 사례를 일반적으로 "CI/CD 파이프라인"이라 부릅니다. - Red hat - 요약하자면 CI는 코드 레벨 테스트 자..
2022.03.02 -
Class function과 Static function
작성 이유 HealthKit Weekly를 작성 중에 WWDC 프로젝트 예제에서 class func이 사용되었다. static과 class function이 Type method라는 것만 알고 정확한 차이를 몰라 작성하게 되었다. 먼저 둘의 차이는 재정의 가능 여부이다. class function은 상속받아서 재정의 가능하다. Method는 크게 Instance Method와 Type Method로 나눌 수 있다. Instance Method 클래스 인스턴스가 생성된 후, 인스턴스가 주체가 되어 실행하는 메소드이다. 일반적인 클래스 내에 선언된 메소드이다. Type Method 클래스 인스턴스없이, 실행가능한 메소드이다. 사용 이유는 메소드 선언이 필요하지만, 인스턴스가 필요 없는 경우이다. 주의 할 점..
2022.02.28