[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift 30

[Swift] KVC(Key-Value Coding), KVO(Key-Value Observing)

KVC(Key-Value Coding) KVC(Key-Value Coding)이란, Key 혹은 KeyPath를 통해 간접적으로 데이터를 가져오거나 수정하는 방법입니다. Key는 String이며 일반적으로 객체 내에 정의된 method, property의 이름이 됩니다. 또한 아스키로 인코딩이 가능하며 소문자로 시작, 공백이 없어야합니다. struct Address { var town: String } struct Person { var address: Address } let seoul = Address(town: "건대입구역") let inu = Person(address: seoul) let inuAddress = inu[keyPath: \.address] let inuTown = inu[keyPa..

🍎 Apple/Swift 2022.03.01

[Swift] Monad

ContextSwift의 Monad에 대해 이해하기 위해서는 먼저 Context와 Content의 관계에 대해 이해해야 합니다. Content는 Context에 들어갈 수 있는 '어떤 것'이며, Context는 Content를 보관할 수 있는 '어떤 것'입니다. 상당히 포괄적인 개념이기에 저 그림에 보여지는 관계정도만 이해해도 충분합니다. 어쨌든 핵심은 Context에 무언가를 담을 수 있다는 것이죠.Collection들은 Context입니다. 내부에 인자들을 담을 수 있기 때문입니다.Optional 또한 Context입니다. 내부에 값을 보유할 수 있기 때문입니다.Functor다음으로 알아야하는 것은 Functor입니다. Functor는 고차함수 map을 적용할 수 있는 모든 컨테이너 타입을 의미합니다..

🍎 Apple/Swift 2022.03.01

[Swift] Property Wrapper

Property Wrapper Property Wrapper는 반복적으로 필요로하는 property 구현 패턴(getter,setter)에 대한 집합을 컴파일러에 하드코딩해놓고, 이를 라이브러리로 정의할 수 있는 일반적인 메커니즘을 제공하는 기능입니다. Property wrapper는 프로퍼티가 저장되는 방식을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 새로운 분리 계층을 추가합니다. 개발을 진행하다보면 Thread-safe한 프로퍼티 또는 값을 DB에 저장하는 프로퍼티가 여러개 필요한 경우가 있을 것입니다. 이를 위해서는 각각의 프로퍼티 모두에 해당 처리들을 위한 코드를 작성해야 했습니다. Property wrapper를 사용하게되면 이런 값 저장을 관리하는 코드들을 Property wrapper..

🍎 Apple/Swift 2022.02.24

[Swift] Copy on write

Copy on write (COW) 이름 그대로 Write가 발생했을 때 Copy를 수행하는 기능입니다. (cf.이는 원래 운영체제에서 프로세스에게 프레임을 할당할 때 메모리 공간 낭비를 막기위해 사용되던 기능인데, Swift에도 비슷한 목적으로 적용되었습니다.) 값타입의 데이터는 값을 참조하지 않고 복사합니다. 하지만 이렇게 매번 복사를 할 경우 값이 변경될 필요가 없음에도 매번 새로운 메모리 공간을 할당하여 복사를 수행하게 됩니다. 따라서 메모리가 낭비되고, 오버헤드까지 발생합니다. 그래서 사용되는 것이 Copy on write입니다. Copy on write는 데이터 복사 시에 실제로 값을 복사하지 않고 동일한 값을 참조하도록 합니다. 그리고 값이 변경(Write)될 때 값을 복사해 변경을 적용합니..

🍎 Apple/Swift 2022.01.26

[Swift] 문자열 처리

코딩테스트의 주력 언어를 Swift로 변경하고나서 가장 번거롭게 느껴진 것은 문자열 처리였다. 문자열 처리가 쉬운 다른 언어와는 다르게 참 복잡하다고 생각했다. 하지만 그래도 정리하고 사용하다보면 금방 적응될 것이라고 생각한다. 그래서 개인적으로 번거로웠던 부분을 정리해놓는다. (새로운 팁을 알게되면 지속적으로 업데이트 예정) 문자열에 하나씩 접근하면 Character 타입으로 받아온다 파이썬은 for문을 활용해 접근했을 때 각 문자를 str형태로 받아온다. 하지만 Swift는 각 요소를 Character 타입으로 받아온다. let str = "Hello" for c in str { print("\(type(of: c)") } // Character // Character // Character // C..

🍎 Apple/Swift 2022.01.22

[Swift] NSCache와 NSDictionary의 차이점

NSCache 다짜고짜 차이점을 찾기 전에 NSCache가 뭔지부터 알아보자. NSCache는 메모리캐싱에 주로 사용되는 객체라고 알려져 있다. 리소스가 부족하면 자동으로 삭제되는 key-value 쌍을 임시로 저장하는 mutable collection 이라고 한다. 여기까지만 봐선 '자동으로 삭제되는' 이라는 부분이 Dictionary와 다른 점인데... 좀 더 알아보자. Overview를 보니 대놓고 차이점을 설명해주고 있다. 읽어보자. 먼저 시스템 메모리를 과도하게 사용하지 않도록하는 자동 삭제 정책을 가진다. 다른 애플리케이션에서 메모리를 필요로할 경우 이 policy가 cache에서 일부 항목을 제거한다. Thread-Safe하게 구현되어 있어 따로 lock하지 않아도 다른 스레드에서 캐시의 항..

🍎 Apple/Swift 2022.01.22

[Swift] UserDefaults와 Codable, NSCoding

UserDefaults 사용자의 데이터를 저장할 수 있는 영구저장소의 일종이다. plist파일로 존재하여 Key-Data 방식으로 데이터를 읽고 저장한다. Float, Int, Double, Bool, String, URL 등 Swift에서 기본적으로 제공하는 자료구조 및 NSData, NSString, NSNumber 등 NS 관련 자료구조를 저장할 수 있다. 이 외의 인스턴스에 대해서는 추가적인 처리가 필요하다. 공통유형의 객체를 쉽게 읽고 저장할 수 있지만, 하나의 파일로 관리되는만큼 그 크기가 너무 방대해지면 오버헤드가 발생할 수 있다. 따라서 일반적으로 기본적인 몇가지 설정들만 저장될 것이 권장된다. 싱글톤을 기반으로 구성되어 있기 때문에 UserDefaults.standard의 형식으로 사용한..

🍎 Apple/Swift 2022.01.01

[Swift] Dynamic Dispatch 줄이기

Dispatch? Dispatch : 어떤 메서드를 호출할 것인가를 결정하여 실행하는 과정 Static Dispatch : 컴파일 시점에서 어떤 메소드가 사용될지 명확히 결정되는 것 Dynamic Dispatch : 런타임 시점에 어떤 메소드가 실행될지 결정되는 것, Swift에서는 class마다 vtable이라는 것을 가지고 있어서 이를 참조하면서 함수가 호출되기 때문에 이에 따른 overhead가 발생하게 된다. 즉 Dynamic Dispatch를 하면 성능의 하락이 있을 수 있다. 따라서 이를 최대한 줄이는 것이 성능상 도움이 된다. Swift에서의 Dispatch Swift의 struct와 class 중 struct를 먼저 생각해보자. struct는 값 타입이라 한 곳에서만 존재하고 상속도 없다...

🍎 Apple/Swift 2021.12.16

[Swift] Codable Protocol

Codable 자신을 특정표현으로 변환하거나 변환될 수 있는 타입 쉽게말해 특정표현으로 인코딩할 수 있고, 특정표현으로부터 디코딩될 수 있는 타입이라는 것이다. typealias Codable = Decodable & Encodable 실제로 Codable은 위와 같이 Decodable과 Encodable가 함께 존재하는 형태로 이루어져 있다. 여기서 특정표현은 여러가지가 있을 수 있지만, 주로 다루게 되는 것은 JSON이다. Class, Enum, Struct에서 모두 사용이 가능하다. Codable 프로토콜을 채택한 구조체로 Encoding, Decoding을 해보며 이해해보자. Encoding struct DataModel : Codable { var title : String var number ..

🍎 Apple/Swift 2021.09.02

[Swift] 기초 문법 정리

iOS 개발을 위해 Swift 문법을 공부하다보니, 낯선 개념들이 많이 보였습니다. 이들을 어느정도 정리해야할 필요성을 느껴 정리해둡니다. 참고1 : iOS 프로그래밍을 위한 스위프트 기초(https://www.boostcourse.org/mo122/joinLectures/38564) 참고2 : 애플 개발자 문서(https://developer.apple.com/documentation) 참고3 : Swift 5.5 번역(https://xho95.github.io/swift/programming/language/grammar/2017/02/28/The-Swift-Programming-Language.html) cf. 타언어와 유사하고 기초적인 문법들은 정리하지 않았습니다. optional nil값과 op..

🍎 Apple/Swift 2021.07.18