Swift 25

[Swift] JSONEncoder.KeyEncodingStrategy

네트워크 통신을 진행하면서 body를 전달할 때 인코딩 과정이 필요하다는 것은 알 것이다.struct 형태의 데이터를 json으로 인코딩해서 서버에 전달해야 하기 때문이다.그런데 여기서 json으로 인코딩할 때 어떻게 할 것인지를 정할 수 있는 enum이 존재한다.그게 바로 JSONEncoder.KeyEncodingStrategy이다.예시 struct를 한 가지 두고 설명을 해보겠다.struct Person { let name: String let birthDay: Date}첫 번째 방법은 case convertToSnakeCase 이다.이는 swift에서 camelCase로 작성된 것들을 snakeCase로 변경한다.즉 birthDay → birth_day, 이렇게 변환하여 전달한다. 두번째..

Swift 2024.06.27

[Swift] @available

`@available``@available`는 Swift 코드에서 특정 플랫폼과 버전 조건에 따라 접근 가능성을 선언하는 데 사용.이는 컴파일러에게 해당 코드가 특정 플랫폼 버전 이상에서만 사용할 수 있음을 알리기 위한 주석으로 작동.주로 함수, 클래스, 구조체, 프로토콜, 속성 등 선언부에 사용.1. `@available` 기본 문법@available(platformName version, *, deprecated: version, message: "reason")주요 구성 요소platformName: iOS, macOS, watchOS, tvOS 등의 플랫폼 이름.version: 플랫폼 버전 번호.`*`: 다른 모든 플랫폼을 포함.deprecated: 코드가 특정 버전 이상에서 더 이상 권장되지 않음..

Swift 2024.05.19

[Swift] #available

`#available``#available`는 Swift에서 런타임 시점에 특정 플랫폼 및 버전 조건을 검사하여 실행 흐름을 제어하는 데 사용.이는 코드가 실행되는 환경이 특정 플랫폼 버전을 지원하는지 확인하고, 지원 여부에 따라 다른 동작을 수행할 수 있게 함.런타임 조건문으로 동작하며, 주로 API 가용성 검사에 사용.1. `#available`의 문법if #available(platformName version, *, ...) { // 해당 버전 이상에서 실행할 코드} else { // 하위 버전에서 실행할 코드}주요 구성 요소platformName: 플랫폼 이름 (iOS, macOS, watchOS, tvOS 등).version: 해당 플랫폼의 최소 지원 버전.`*`: 지정되지 않은 다..

Swift 2024.05.19

[Swift] 버전 대응 Wrapper

버전 대응 WrapperSwift 애플리케이션에서 iOS, macOS 등 특정 플랫폼 버전에 따라 코드를 실행하거나 기능을 활성화해야 하는 경우가 종종 존재.이러한 요구를 처리하기 위해 버전 대응 Wrapper를 활용하여 코드의 가독성과 재사용성을 높일 수 있음.1. 기본 버전 조건 처리Swift는 @available 및 #available 키워드를 사용하여 플랫폼 및 버전 조건을 확인.if #available(iOS 16, macOS 13, *) { print("iOS 16 이상에서 동작")} else { print("이전 버전에서 동작")}#available: 실행 시점에서 조건 확인.@available: 컴파일 시점에서 사용 가능성을 표시.예제: 뷰에 버전 따라 다른 스타일 적용struc..

Swift 2024.05.19

[Swift] Property Wrapper

1. Property WrapperPropertyWrapper는 Swift에서 속성의 동작을 캡슐화하여 속성 접근과 변경에 특정 로직을 추가할 수 있도록 지원하는 기능.반복적인 코드를 줄이고 속성의 동작을 추상화하여 재사용 가능한 구조를 제공.@propertyWrapper를 사용해 정의되며, SwiftUI의 @State, @Binding, @AppStorage 등이 대표적인 예.2. Property Wrapper 기본 구조@propertyWrapperstruct ClampedValue { private var value: Int private let range: ClosedRange var wrappedValue: Int { get { value } set..

Swift 2024.04.29

[Swift] Opaque Type (some 키워드)

1. OpaqueType (some 키워드)Swift의 Opaque Type은 함수나 속성이 반환하는 구체적인 타입을 숨기고 대신 타입 정보를 추론할 수 있도록 하는 기능.some 키워드를 사용하여 선언하며, 내부적으로 반환되는 타입이 하나로 고정되지만, 호출자는 타입 정보를 알 필요 없이 사용 가능.이 기능은 Generic과 비슷해 보이지만, 동작 방식에서 중요한 차이점이 존재.Opaque Type은 주로 캡슐화와 유연한 반환 타입 설계에 사용.2. Opaque Type 사용법func makeOpaqueShape() -> some Shape { Circle() // Shape 프로토콜을 준수하는 Circle 반환}반환 타입이 some Shape로 정의되었으므로, 함수는 Shape 프로토콜을 준수하..

Swift 2024.04.19

[Swift] map

`map`, `compactMap`, `flatMap`은 Swift의 고차 함수로 컬렉션, 옵셔널, 시퀀스 등 변환 작업을 적용할 때 사용.이들은 각기 다른 방식으로 데이터를 변환하고, 특정 조건에 따라 값을 필터링하거나 중첩된 구조를 평탄화.1. `map`컬렉션이나 옵셔널, 시퀀스의 각 요소에 주어진 변환 함수를 적용하여 새로운 컬렉션이나 값을 생성.원래의 데이터 구조는 유지.컬렉션에서 사용let numbers = [1, 2, 3, 4]let squaredNumbers = numbers.map { $0 * $0 }print(squaredNumbers) // 결과: [1, 4, 9, 16]옵셔널에서 사용let optionalValue: Int? = 3let result = optionalValue.map..

Swift 2024.04.19

[Swift] init

1. Swift의 init이란?Swift에서 init은 클래스, 구조체, 또는 열거형의 생성자(Initializer)로, 인스턴스를 초기화하는 역할.init 메서드는 인스턴스의 모든 저장 프로퍼티를 초기화하고, 초기 상태를 설정함.2. init의 기본 특징모든 저장 프로퍼티 초기화저장 프로퍼티는 초기화되지 않으면 에러가 발생하게 됨.반환 값이 없음init 메서드는 특별히 반환값을 가지지 않음.자동 초기화 제공Swift는 프로퍼티에 초기값이 있거나, 모든 프로퍼티가 초기화 가능한 경우 자동 초기화 메서드를 제공.3. 기본 문법struct Person { var name: String var age: Int init(name: String, age: Int) { self.name..

Swift 2024.04.18

[Swift] weak, unowned

1. weak와 unowned란?Swift에서는 메모리 관리를 위해 강한 참조(Strong Reference), 약한 참조(Weak Reference), 비소유 참조(Unowned Reference)를 제공.weak와 unowned는 참조 타입 사이에서 강한 순환 참조(Strong Reference Cycle)를 방지하는 데 사용.둘 다 ARC(Automatic Reference Counting)의 메모리 누수 문제를 해결하는 데 중요한 역할.2. weak와 unowned의 공통점강한 참조(Strong Reference)를 생성하지 않음.참조하는 인스턴스가 메모리에서 해제될 수 있도록 함.강한 순환 참조를 방지하여 메모리 누수를 줄임.3. weak와 unowned의 차이점 weakunowned참조 대상O..

Swift 2024.04.18

[Swift] self / Self

1. `self`: 현재 인스턴스를 나타내는 키워드`self`는 현재 인스턴스 자체를 참조.Swift에서 모든 인스턴스 메서드와 이니셜라이저에는 암묵적으로 `self`가 포함되어 있으며, 필요한 경우 이를 명시적으로 사용 가능.1.1 사용 목적현재 인스턴스 참조메서드나 이니셜라이저 내부에서 `self`를 사용하면, 해당 메서드가 호출된 인스턴스를 참조.이를 통해 인스턴스 프로퍼티에 접근하거나 인스턴스 메서드를 호출할 수 있음.이름 충돌 해결이니셜라이저나 메서드의 파라미터 이름이 인스턴스 프로퍼티와 동일한 경우, `self`로 인스턴스 프로퍼티를 참조.클로저 캡처클로저 내부에서 `self`를 사용하면, `self`가 클로저 외부의 인스턴스를 참조.1.2 동작 원리와 예제struct Car { var ..

Swift 2024.04.18