Swift에서 메모리 관리는 ARC(Automatic Reference Counting)를 통해 자동으로 이루어지지만, 순환 참조(retain cycle) 문제를 해결하기 위해서는 개발자가 직접 weak와 unowned 참조를 적절히 사용해야 합니다. 이 두 키워드의 차이점과 사용 기준을 알아보겠습니다.ARC와 순환 참조 문제먼저 왜 weak와 unowned가 필요한지 이해해보겠습니다.class Person { let name: String var apartment: Apartment? init(name: String) { self.name = name } deinit { print("\(name) is being deinitialized..

Swift의 대표적인 고차함수인 map, filter, reduce에 대해 정리해보도록 하겠습니다. 먼저 고차함수(Higher-order function)은 '다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수'를 뜻합니다. Swift의 함수(Closure)는 일급 객체이기 때문에 함수의 전달인자로 사용할 수 있으며, 함수의 결과값으로 반환할 수 있습니다. 이제 Swift 표준 라이브러리 컨테이너 타입(Array, Set, Dictionary)에 구현되어있는 고차함수인 map, filter, reduce에 대해 알아보겠습니다. 1. map map은 애플 공식 문서에 '시퀀스의 요소에 대해 주어진 클로저를 매핑한 결과를 포함하는 배열을 반환한다'고 정의되어있습니다. map의 파라미터인 ..

오늘은 Swift Generic의 개념과 기본적인 활용법에 대해 정리해보겠습니다. 문서에 따르면 'Generic을 사용하면 정의한 요구 사항에 따라 모든 유형에서 작동할 수 있는 유연하고 재사용 가능한 함수 및 유형을 작성할 수 있습니다. 중복을 피하고 그 의도를 명확하고 추상적인 방식으로 표현하는 코드를 작성할 수 있습니다.' 라고 정의되어 있습니다. 그리고 Swift의 가장 강력한 기능 중 하나이고, Swift 표준 라이브러리의 대부분은 Generic으로 만들어졌다고 합니다. 우리가 인지하지 못한 부분에서도 제네릭을 사용하고 있는데, 예를 들어 Swift의 Array, Dictionary 유형은 모두 Generic Collection이라고 합니다. 아래와 같이 제네릭을 활용하지 않고 두 Int 변수를..

1. 프로토콜(Procotol)이란? - 프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. - 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. - 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform)고 표현합니다. - 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시할 뿐이지 스스로 기능을 구현하지는 않습니다. 2. 정의 - Protocol 키워드를 사용하여 정의합니다. protocol protocolName { /* 정의부 */..
Swift의 클로저는 다양한 표현법을 사용할 수 있습니다. 먼저, 기본적인 클로저의 표현법을 통해 구성한 함수입니다. func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int { return method(a, b) } var result: Int 클로저의 다양한 표현법에 대해 알아보겠습니다. 1. 후행 클로저 - 클로저가 함수의 마지막 전달인자일 때, 마지막 매개변수 이름을 생략한 후 함수 소괄호 외부에 클로저를 구현할 수 있습니다. result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in return left + right } print(result) // 20 출력 2. 반환타..
Swift에는 일종의 코드의 블럭인 '클로저'가 존재합니다. 클로저는 일급 시민이기 때문에 변수, 상수 등으로 저장할 수 있고 전달 인자로 전달이 가능합니다. 함수는 이름이 있는 클로저의 일종이라고 볼 수 있습니다. - 클로저는 매개변수와 반환값을 가질 수 있습니다. - in 이라는 키워드로 실행코드를 작성해줍니다. { (매개변수) -> 반환타입 in // 실행코드 } // sum이라는 상수에 클로저를 할당 let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b } let sumResult: Int = sum(1, 2) print(sumResult) // 3 출력 - 클로저는 함수의 전달인자로 사용할 수 있습니다. - 주로 함수의 실행이 완료된 ..
enum은 타입이므로 대문자 카멜케이스를 사용하여 정의합니다. Swift의 열거형은 각 case 자체가 고유의 값입니다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ,로 구분해 선언 가능 } // 열거형 생성 enum Weekday { case mon case tue case wed case thu,fri,sat,sun } // 열거형 사용 var day: Weekday = Weekday.mon // 타입이 명확하다면 .case 표현도 가능 day = .tue print(day) // tue 출력 - case 에 모든 값을 구현하면 , Default 를 구현하지 않아도 됩니다. -하나의 case 라도 구현하지 않으면 Default 를 포함해야합니다. // d..
1. 구조체 - 구조체는 값(Value)타입입니다. - Swift의 구조체는 타입을 정의하는 것이기 때문에 대문자 카멜케이스를 사용합니다. - struct 키워드를 사용해 정의 할 수 있습니다. struct 구조체이름 { //구조체 내용 } - 프로퍼티는 인스턴스 변수를 의미합니다. - 메서드는 구조체 안에 들어있는 함수를 의미합니다. - var로 선언하면 가변 프로퍼티입니다. - let로 선언하면 불변 프로퍼티 입니다. - static 키워드를 사용하면 타입 프로퍼티/메서드로 사용할 수 있습니다. struct Example { var mutableProperty: Int = 100 //가변 프로퍼티 (값 변경 가능) let immutableProperty: Int = 100 // 불변 프로퍼티 (값 변..
- Total
- Today
- Yesterday
- coreml
- C++
- blendshapes
- Swift
- infallible
- 카카오인턴십
- SWEA
- Lottie
- blendshape
- boj
- 코코아팟
- cocoapods
- rxswift
- 프로그래머스
- ios
- rxswift6
- Reactivex
- Swift weak
- Kotlin
- 안드로이드
- Neo4j
- 백준
- SwiftUI
- DispatchQueue
- GraphDB
- disposeBag
- Swift unowned
- 알고리즘
- 백준온라인저지
- ARKit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |