
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 두 가지는 같은 목적을 공유하지만, 관련된 객체..
HTML 삽입 미리보기할 수 없는 소스 Tuist로 프로젝트 설정하기! Tuist 를 사용하게 된 계기 아카데미 내에서 프로젝트를 하는 동안, pbxproj 파일의 충돌은 계속해서 일어났다. 이것을 해결하기 위해 git attributes 파일도 작성해봤지만, 여전히 충돌은 계속해서 일어났고, develop 브랜치에 rebase 혹은 pull 을 땡기면 github 가 자동으로 충돌을 머지해주는 것 같았지만, 종종 pbxproj 파일이 깨지는 경우가 발생했고 그 때마다 머지 전 커밋으로 돌아가 conflict 를 직접 해결하거나, 아니면 눈알 빠지게 pbxproj 파일을 훑어보며 잘못 합쳐진 부분을 직접 수정해야 했다... 문제는 이런 사태로 인해 시간이 너무 많이 소요된다는 점이다. 프로젝트가 매우 작..
Tuist를 먼저 공부하기 전 알아야 할 개념들을 먼저 정리해보았다. Xcode Target의 의미 Project나 Workspace의 파일들을 Build 하여 생성되는 End Product 를 의미한다. End Product는 앱이 될 수도 있고, Framework가 될 수도 있고, Unit Test 번들 이 될 수도 있다. 또한 프로젝트에는 하나 이상의 Target 이 포함될 수 있으며, 각 타겟은 하나의 제품을 생성한다! Target은 product 를 빌드하기 위해, project, workspace 안의 파일들을 (소스파일) 과 그 소스파일을 처리하는 명령 (Build setting, Build phase) 들을 보고 End product 를 생성한다. 즉 Project 와 workspace 에..

Delegate Pattern 이란? Delegate라는 단어는 `위임하다` 라는 뜻을 지니고 있다. 즉 Delegate Pattern 이란 주로 객체의 행동(메소드) 또는 프로퍼티 의 구현을 다른 객체에게 맡겨야 할 필요가 있을 때 사용한다. 아래의 다이어그램을 살펴보자 Object using a delegate - delegate 가 필요하거나 사용하는 객체로, 어떤 이벤트가 발생했을 때 이에 대응되는 delegate 의 메소드를 호출한다. Delegate protocol - delegate object 가 구현해야 할 메소드들을 정의하는 protocol 이다. Object acting as a delegate - delegate protocol 을 준수하는 객체로, Object using a del..

iOS 12 이하 버전의 AppDelegate iOS 12 이하 버전에서는 Scene Delegate 라는 것이 존재하지 않고, 오로지 AppDelegate 만 존재했다. iOS 12 이하 버전에서의 AppDelegate는 다음과 같이 2가지 역할을 했었다. Process Level 의 이벤트 발생을 알려줌 애플리케이션 시작 life cycle 애플리케이션 종료 life cycle 기타 등등의 life cycle 발생 시 delegate 메소드 실행 UI 의 상태변화를 알려줌 애플리케이션이 포그라운드 상태로 진입해 유저에게 보여지거나 백그라운드 상태로 진입해서 유저에게서 숨겨지거나 여러 가지 UI 이벤트가 존재할 때 delegate 메소드를 실행 위와 같이 AppDelegate 가 UI 와 프로세스의 라..

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..
Comment