iOS 53

App thinning

애플리케이션을 설치할 때, 앱스토어와 운영체제가 디바이스의 환경에 맞게 설치하는 설치 최적화 기술 필요한 만큼의 리소스만 다운로드하기에 적은 디스크 사용량, 빠른 다운로드를 제공 Slicing 여러 가지 디바이스와 운영체제를 위한 앱 번들의 variants(변형)을 생성 및 제공하는 과정 variants(변형)에는 각 디바이스와 운영체제가 필요로 하는 실행 가능한 아키텍처와 리소스가 담겨있다. 개발자가 앱스토어 커넥트에 풀버전의 앱 빌드를 업로드하게 되면 앱스토어는 자동적으로 variants를 생성하고 전달한다. 유저가 앱스토어에서 앱을 다운로드하게 되면, 유저의 디바이스와 운영체제 버전에 맞는 variants를 다운로드하게 된다. on-demand resource(ODR) 주문형 리소스는 이미지, 음원..

iOS/iOS 상식 2023.07.23

Async/Await

async는 함수가 비동기로 처리된다는 것을 의미한다. await은 마킹된 곳은 potential suspension point(잠재적 일시 중단 지점)로 지정된다. async로 선언한 함수가 완료될 때까지 일시 중지 되는 지점이다. □ 예시 func asyncTest() async throws -> String { try await Task.sleep(nanoseconds: 3_000_000_000) //3초 return "sleep 끝" } print("before task") Task{ let string: String = try await asyncTest() print(string) } print("after task") // 출력 // before task // after task // sle..

iOS/Swift 상식 2023.07.23

Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요?

타입 안전성 (type safety) 결론부터 말하자면 Swift는 타입 안전성이 보장이 되어 있는 언어이다. Swift는 타입안정성을 추구하기 때문에 코드를 컴파일할 때 타입 확인 작업을 수행하고 잘못된 타입이 있다면 오류를 표시한다. 이는 개발 과정을 통해 오류를 빠르게 확인하고 수정을 가능하게 만들어서 안전성을 보장하게 된다. Swift 언어를 사용하다 보면 나는 타입을 명시해주지 않았는데 잘 돌아가는 경우가 있을 것이다.이것이 가능한 건 Swift가 타입 추론을 지원해 주는 언어이기 때문이다. let num = 3//타입을 명시하지 않았지만 컴파일 시 Int타입으로 추론 let name = "JJ"//타입을 명시하지 않았지만 컴파일 시 String타입으로 추론 위 예시처럼 타입을 명시해 주지 않아..

iOS/Swift 상식 2023.07.23

Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요?

코딩을 하다보면 구조체 내부에서 또다른 인스턴스가 들어오는 상황이 생긴다. 그러다 보면 프로퍼티를 따라서 들어가는 경우가 생기는데 이때 프로퍼티가 옵셔널인 경우 nil인지 아닌지 확인해야하는 경우가 있다. 예시를 보면 쉽게 알 수 있다. □ Optional Chaining 적용 안한 것 func guardJob(owner: Person?) { if let owner = owner { if let home = home { if let `guard` = home.guard { if let guardJob = `guard`.job { print("우리집 경비원의 직업은 \(guardJob)입니다") } else { print("우리집 경비원은 직업이 없어요") } } } } } □ Optional Chaini..

iOS/Swift 상식 2023.06.26

Codable

Codable = Encodable + Decodable Encodable은 data를 Encoder에서 변환해주려는 프로토콜로 바꿔주는 것 Decodable은 data를 원하는 모델로 Decode 해주는 것 Codable은 프로토콜이라서 Struct, enum, class 전부 채택 가능하다. struct User: Codable { enum CodingKeys: String,CodingKey { case id case name case birth case phoneNum = "phone_num" } let id: Int let name: String let birth: String let phoneNum: String } Enum CodingKeys CodingKeys는 json Key에서 사용하는 ..

iOS/Swift 상식 2023.06.26

Result Type

Result 타입은 Gerneric Enumeration으로 선언되어 있고 연관된 값의 성공과 실패를 나타낸다. 말만 들으면 뭔가 헷갈린다. 정의의 윗부분만 가져와 보았다. @frozen public enum Result where Failure : Error { /// A success, storing a `Success` value. case success(Success) /// A failure, storing a `Failure` value. case failure(Failure) enum 타입으로 구성되어 있고 각 case에 연관된 값을 표현한다 where 문법에 의해 failure의 경우에는 Error 타입만 입력받는다. 뭔지 잘 모를 땐?! 예시를 보면 이해를 쉽게 할 수 있다. enum P..

iOS/Swift 상식 2023.03.25

Some

Swift에서 Some 키워드는 리턴 타입을 자동으로 빠르게 추론할 수 있는 기능이다. 예를 보면서 이해하면 빠르게 이해할 수 있다. protocol Shape{ func describe() -> String } struct Square: Shape{ func describe() -> String { return "I'm Square" } } struct Circle: Shape{ func describe() -> String { return "I'm Circle" } } Shape 프로토콜 내부에 describe() 함수를 선언하고 구조체 Square, Circle을 생성하고 Shape 프로토콜을 상속받는다. 그러면 각 구조체에서 describe() 함수는 오버라이딩할 수 있게 된다. func make..

iOS/Swift 상식 2023.03.25

property wrapper

특징 특정 값을 한 번 감싸서 저장을 위한 로직(setter)과 얻어오기 위한 로직(getter)을 어느 정도 분리해서 반복을 줄여주는 방법을 제공한다. 키워드는 지역 변수에만 사용이 가능하다. @UserDefault, @State, @Binding등 많이 있다. 아마 SwiftUI를 사용해 보았다면 한 번쯤은 보았을 것이다. 예제를 살펴보면 쉽게 이해할 수 있다. @propertyWrapper struct Money{ private var money: Int init() {self.money = 0} var wrappedValue: Int{ get {return self.money} set {self.money += newValue} } } struct Bank{ @Money var firstPeopl..

iOS/Swift 상식 2023.03.10

defer

defer는 되게 신기하게 동작하는 기능이다. 특징 현재 코드 블록을 빠져나가기 전에 실행해야 하는 코드를 작성할 수 있다. 함수에서 오류가 발생하여 코드가 블록을 빠져가게 되면 해당 함수가 할당한 메모리를 안전하게 해제할 수 있다. 실행되는 순서는 다음 두 가지 규칙을 따른다. 실행 규칙 defer가 중복될 때 역순으로 실행된다. 하나의 defer는 선언된 코드 블록을 빠져나가기 직전에 실행된다. 예시를 통해 알아보면 빠르게 이해할 수 있다. class A{ func test() { defer { print("test 1") } do { defer { print("test 2") } print("test 3") } for i in 0..

iOS/Swift 상식 2023.03.09

Extension 이란?

Extension은 새로운 함수적 기능을 class, struct, enum, protocol에 확장한다는 의미를 가진다. Extension으로 타입에 추가할 수 있는 기능 연산 타입 프로퍼티/ 연산 인스턴스 프로퍼티 타입 메서드/ 인스턴스 메서드 이니셜라이저 SubScripts 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 상속과 Extension의 차이점 상속 Extension 타입 클래스 타입만 가능 구조체, 클래스, 프로토콜 등에 적용 가능 특징 - 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현할 수 있음 - 수직 확장 - 기존 타입에 기능을 추가 가능 - 수평 확장 - 특정 타입을 준수하는 프로토콜 별 구현부를 분리하여 코드 가독성을 높일 수 있음 override..

iOS/Swift 상식 2023.03.08