
HTML 삽입 미리보기할 수 없는 소스 Slice 활용하기! Swift의 Array는 Collection 프로토콜을 채택하고 있는 자료구조이다. 만약 Collection의 두 번째 원소를 얻으려고 하는 extension 코드를 작성해본다고 하자. 일단 가장 기본적인 로직으로! 일단 Collection 의 원소 갯수가 2개 이상인지 확인한다. 만약 두 개 이상이면, second 원소를 반환한다. 두 개 보다 적으면, nil을 반환한다. extension Collection { var second: Element? { // Collection의 원소 갯수가 2개 이상인지 확인한다. guard count >= 2 else { // 두 개 보다 적으면, nil을 반환한다! return nil } // 만약 두개..

HTML 삽입 미리보기할 수 없는 소스 Unowned와 weak의 라이프타임과 성능 기본적으로 swift 코드를 작성할 때, 객체 간의 순환 참조를 피하기 위해서 unowned와 weak 중 하나를 선택해야 한다. 그러나 두 개의 차이점에 대해선 알지만, 단순히 생각하면 옵셔널 언래핑 과정이 필요하더라도 weak를 사용하는게 좋다는 생각이 드는데, Swift에서 제공해주는 Null safety를 포기하면서까지 unowned를 사용하는 이유가 있지 않을까? 기초 많은 언어에서, 순환 참조에 의해 인스턴스가 메모리에서 할당되지 않는 문제를 해결하기 위해 weak 참조라는 개념이 존재한다. swift엔 두 가지의 weak 참조가 존재한다. unowned weak 두 가지는 같은 목적을 공유하지만, 관련된 객체..

Initialization 초기화는 클래스, 구조체 또는 열거형을 사용하기 위해 준비하는 과정. 각각의 저장 프로퍼티 (Property) 에 초기값을 넣어주고, 새로운 인스턴스가 사용되기 전 각종 초기작업을 할 수 있는 life cycle swift 의 initializer 는 objective-c 의 init 처럼 값을 반환하지는 않는다. initilization 의 주요한 역할은 새로운 인스턴스가 처음으로 사용되기 전 정확하게 초기화되었는지 보장하는 것 Setting initial values for stored properties - class 나 struct 의 저장 프로퍼티는 indeterminate 상태로 남을 수 없다. 아래 코드를 보자 class SampleClass { let name: ..
Copy on write swift 에서 값 타입 (struct, enum) 을 복사할 때는 항상 새로운 인스턴스가 할당된다고 알고 있다. 그러나 Array, Set, Dictionary 같은 collection type 은 내부적으로 아주 많은 원소를 가질 수도 있다. 만약 10000개의 원소를 가지고 있는 배열이 있는데, 이것을 새로운 프로퍼티에 할당하거나 매개변수로 넘길 때마다 새로운 인스턴스를 생성한다면, 성능이 떨어질 수 있다. 따라서 swift 뿐 아니라 많은 언어에서 Copy on write 방식을 사용해 값을 복사한다. 직역하자면 write, 즉 쓰기 작업을 할 때 값을 복사한다는 뜻으로, 할당 시 바로 복사하는 Copy on assign 방식과는 다르다. swift 에선 Array, Se..

Adapter Pattern 아이폰을 생각해보자. 지금의 아이폰은 오디오 단자가 따로 없으며, 만약 유선 헤드폰을 연결하려고 할 경우 유선 헤드폰이 라이트닝 단자를 가지고 있어야 한다. 그러나 상당 수의 유선 헤드폰은 라이트닝 단자를 가지고 있지않다. 이런 상황을 해결하기 위해 오디오 단자를 입력으로 받아 라이트닝 단자로 출력해주는 어댑터란 제품이 존재하며, 서로 호환되지 않는 두 개의 단자를 연결해주는 역할을 한다. 소프트웨어에서의 Adpater Pattern 도 마찬가지로 위와 같은 상황을 해결하기 위해서 고안된 디자인 패턴이다. 예시와 함께 이해해보자. Authenticate Service 현재 어떤 애플리케이션을 개발 중이고, 이 애플리케이션은 유저 인증을 위해 Firebase Authentica..

개요 Swift 에서 지원하는 자료형인 class 와 struct 의 차이점에 대해서 알아보자. 또한 enum 에 대해서도 알아보자. 객체지향 언어를 다루는 많은 개발자들은 이미 class 의 개념에 대해서 익숙하다. 하지만 필자는 struct 라는 자료형을 swift 에서 처음으로 접해봤는데 (c언어를 제외하고), 이 두 가지 타입의 차이점이 극명하고 장단점이 명확하다보니, 다양한 상황에서 적절한 타입을 사용하는 것이 성능 개선을 위해 필요한 능력이 되었다. Class, Struct 의 공통점 관련있는 값을 저장하거나 계산할 수 있는 프로퍼티를 선언할 수 있다. 함수를 선언할 수 있다. 내부에 선언된 프로퍼티나 메소드에 (타입이름).(프로퍼티 이름) 과 같이 . 을 사용해 접근할 수 있다. Protoc..

DispatchQueue란? DispatchQueue는 작업 항목의 실행을 관리하는 클래스다. 메인 쓰레드 혹은 백그라운드 쓰레드에서 작업을 연속적으로, 혹은 병렬적으로 실행할 수 있다. 이름에서 알 수 있듯이 Queue 자료구조의 형식을 띄고 있어, FIFO (First In First Out) 입출력 구조를 가진다. DispatchQueue 는 다음과 같이 두 가지 종류가 있다. Serial Queue 한 작업을 끝마쳐야 다음 작업으로 넘어갈 수 있다. Concurrent Queue 여러 작업을 동시에 실행할 수 있다. DispatchQueue 로 넣은 작업들은 시스템에 의해 관리되는 쓰레드 풀에서 실행되며, 앱의 기본 쓰레드를 의미하는 main 쓰레드를 담당하는 DispatchQueue 를 제외하곤..

구조체나 열거형처럼 전달할 때마다 값을 복사해서 새로운 인스턴스를 전달하는 값 타입과는 달리 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에, 언제 메모리에서 해제되는지가 중요한 문제다. 만약 인스턴스가 더 이상 필요하지 않은데도 계속해서 메모리에서 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되고 이는 성능의 저하로 이어진다. Java 나 Kotlin 같은 언어들은 가비지 컬렉션이란 기법을 사용해 메모리를 관리한다. Swift는 ARC 라는 기법을 사용하는데 이것에 대해 알아보도록 하자 ARC란? Automatic Reference Counting (ARC)는 이름에서도 알 수 있듯이 자동으로 메모리를 관리해주는 방식이다. ARC 는 더 이상 필요하지 않은 클래스의 인스턴스를..
Comment