Swift 32

Swift의 메서드 실행 방법 (1) | Direct(Static) Dispatch/ Table(Dynamic) Dispatch/ Message Dispatch

Swift에서 함수를 실행시키는 방법이 크게 세 가지가 있다. Static Dispatch라고도 부르는 Direct Dispatch, Dynamic Dispatch라고도 부르는 Table Dispatch, 그리고 마지막으로 Message Dispatch가 있다. 사실 우리는 그냥 함수를 정의하고 실행시키는 부분만 관여하지만 내부적으로 메서드 실행방법은 성능과도 관련이 있기 때문에 알아보도록 하자!! Swift의 메서드 실행 방법 (1) | Direct(Static) Dispatch/ Table(Dynamic) Dispatch/ Message Dispatch Swift의 메서드 실행 방법 (2) | table 기반 메커니즘 Virtual Table과 Witness Table Swift의 메서드 실행 방법 ..

Swift 2024.01.22

[Swift] mutating 키워드와 COW(Copy On Write)

swift에서 value type(enum, struct)의 프로퍼티는 기본적으로 메서드 내에서 수정할 수 없는데 수정해야 하는 경우 앞에 mutating키워드를 붙여줘야 하는 것을 모두 알고 있을 것이다. mutating을 선언한 메서드는 메서드 내에서 프로퍼티를 변경할 수 있고 메서드가 종료될 때 변경한 모든 내용을 원래 struct 인스턴스 메모리에 다시 기록하도록 하는 것이다. struct Person { var name: String mutating func changeName() { name = "changedName" } } var heidi = Person(name: "heidi") heidi.changeName() 그렇다면 mutating라는 키워드는 왜 필요한 것일까? swift는 값이..

Swift 2023.12.24

[swift] 제어 전송문 정리 | fallthrough continue break return throw

swift 기본 문법에 등장하는 개념인 제어 전송문에 대해 한번쯤 정리할 필요가 있을 것 같아 써보는 글이다. 일단 fallthrough, continue, break, return, throw에 대한 걸 구체적으로 알기 전에 어디에서 사용되는 제어 전송문 키워드인지 살펴보자면, fallthrough는 switch문에서 사용하고 continue는 반복문에서, break는 switch문과 반복문 두 곳에서 모두, return은 함수, throw는 에러 발생 가능 함수에서 사용된다. # fallthrough fallthrough는 switch 문에서 사용하고 해당 case에 매칭됐다고 하더라도 (한 단계)다음 case로 내려가서 문장을 실행시킨다. switch a { case 1,2: print(a) cas..

Swift 2023.11.26

[Swift] 클로저와 중첩함수의 캡처 현상 (2) | 캡처리스트 클로저에서self키워드

이전 글에서 클로저의 간략한 내용과 캡처 현상이 일어나는 이유! 캡처 현상이 일어나는 상황들! 그리고 값 타입과 참조타입에 대해 캡처현상이 일어날 때 각각 어떻게 캡처하고 있는지에 대해 알아보았죠. [Swift] 클로저와 중첩함수의 캡처 현상 (1) [Swift] 클로저와 중첩함수의 캡처 현상 (2) | 캡처리스트 클로저에서self키워드 이번 글에서는 클로저에서 사용하는 캡처리스트에 대해서 알아볼 건데요! 캡처 리스트를 사용하면 클로저의 캡처현상에 대해 어떠한 변화가 생기는데 여기서도 값타입과 참조타입의 변화가 각각 다른데 이 부분이 흥미로웠어요. 그리고 우리는 보통 클로저를 객체 내에서 사용하게 되고 이때 "힙영역"에 저장된 클로저가 "힙영역"에 저장된 객체를 강한 참조 하게 되는 상황이 있는데요. 어..

Swift 2023.11.09

[Swift] 클로저와 중첩함수의 캡처 현상 (1)

Swift에서 일급객체라고 불리는 클로저의 메모리는 어디에 저장되는지 알고 있나요? 그리고 외부 변수가 클로저 내부에서 사용될 시, 함수와는 다르게 어떤 현상이 일어나는지는 알고 있나요? 이번 글에서는 클로저나 중첩함수가 할당된 변수가 실행될 때 캡처 현상이 일어나는 상황과 이유에 대해 정리해 보려 합니다! 다음글에서는 캡처 현상 때문에 외부 요인에 의해 내부에서 사용되는 외부 값이 변경되는 것을 방지하기 위해 어떤 방법을 쓸 수 있는지 방법을 이야기해 볼게요 ㅎㅎ [Swift] 클로저와 중첩함수의 캡처 현상 (1) [Swift] 클로저와 중첩함수의 캡처 현상 (2) | 캡처리스트 클로저에서self키워드 # 🍑 클로저란 무엇이고 왜 사용할까? 클로저는 "이름이없는(익명) 함수"라고 하죠. Swift에서 ..

Swift 2023.11.01

[Swift] 메모리 관리 (2) | 약한참조 WeakReference와 비소유참조 UnownedReference

앞선 글에서 Swift의 메모리 관리 시스템인 ARC에 대한 개념과 메모리 누수가 일어날 수 있는 상황인 강한 순환 참조에 대해서 간략하게 알아보았다. 그럼 이제 메모리 누수를 발생시키지 않을 수 있는 방법인 약한 참조 Weak Reference와 비소유참조 Unowned Reference에 대해 설명해 보겠다! [Swift] 메모리 관리 (1) | ARC와 메모리 누수 (feat.강한순환참조) [Swift] 메모리 관리 (2) | 약한참조 WeakReference와 비소유참조 UnownedReference # 🥨 약한 참조 우선 약한 참조(Weak Reference)와 비소유 참조(Unowned Reference)의 공통점은 가리키는 인스턴스의 ReferenceCount(RC) 숫자를 올라가지 않게 한..

Swift 2023.10.25

[Swift] 메모리 관리 (1) | ARC와 메모리 누수 (feat.강한순환참조)

Swift 메모리에 대해서 공부를 하다 보면 자연스레 ARC라는 단어가 익숙해지게 되죠. 메모리 관리는 왜 필요한지, ARC 시스템은 어떤 원리인지와 메모리 누수가 일어나는 상황에 대해서 정리해 보면 어느 정도개념이 잡힐 것 같으니 정리해 봅시다! [Swift] 메모리 관리 (1) | ARC와 메모리 누수 (feat.강한순환참조) [Swift] 메모리 관리 (2) | 약한참조 WeakReference와 비소유참조 UnownedReference # 🥨 메모리 관리가 필요한 타입 우리가 흔히 알고 있는 타입 중에 값 형식의 인스턴스 은 메모리 관리가 필요하지 않고 참조 형식, 즉, 우리가 흔히 아는 클래스, 클로저 등의 인스턴스에 대해서는 메모리 관리가 필요하다. 왜일까? 내가 아는 선에서 내용을 공유하자면..

Swift 2023.10.16

[Swift] Initialization (2) | 상속, 확장에서의 생성자

앞의 글에서 알아본 것처럼 생성자의 종류는 많습니다..!! 이번에는 상속의 경우에 지정생성자와 편의생성자가 어떻게 재정의 되는지와 확장의 경우에 생성자를 어떤 식으로 구현할 수 있는지에 대해서 정리해보려구 해요! [Swift] Initialization (1) | 생성자의 종류 : 지정생성자, 편의생성자, 필수생성자, 실패가능생성자 [Swift] Initialization (2) | 상속, 확장에서의 생성자 # 🥨 상속에서의 생성자 필요한 경우 우리는 상속을 종종하곤하는데 이때 메서드 등 여러 가지를 재정의(Override)하곤 하죠? 이것처럼 생성자도 재정의가 필요한데 이 과정이 좀 까다로울 수 있어서 한번 정리해 보려고요. 지정 생성자의 재정의 일단, 지정생성자는 서브클래스에서 재정의(override..

Swift 2023.10.10

[Swift] Initialization (1) | 생성자의 종류 : 지정생성자, 편의생성자, 필수생성자, 실패가능생성자

기본 생성자 외에 지정 생성자, 편의 생성자, 실패 가능 생성자, 필수 생성자, 멤버와이즈 생성자에 대해 알고 계신가요? 아니면 들어본 적이 있으신가요?? 저는 이번에 공부하면서 제대로 알게 되어서 한번 정리해 보려고요! 한 번도 편의 생성자나 실패 가능 생성자를 사용해서 코드를 짜본 적은 없지만 공부를 하면서 이런 다양한 생성자를 잘 활용하면 중복 코드 없이 가독성 있고 활용도 높은 타입을 만들 수 있겠다고 생각했어요. [Swift] Initialization (1) | 생성자의 종류 : 지정생성자, 편의생성자, 필수생성자, 실패가능생성자 [Swift] Initialization (2) | 상속, 확장에서의 생성자 # 🥨 생성자의 의미 일단, 우리가 클래스나 구조체를 만들 때 습관적(?)으로 구현했던 ..

Swift 2023.10.04

[Swift] switch-case 문에서의 where절과 unknown 키워드

swift에서 switch문은 if문처럼 조건문이며 조건이 만족했을 때 해당 case에서의 코드가 실행되는 것은 대부분 알고 있을 것이다. 하지만 switch문에서 우리가 흔히 사용하는 것처럼 값이 딱 일치하는 case로 분기하는 게 아니라 어떤 조건을 만족했는지에 대한 것을 case문으로 작성하고 만족했을 때 실행문으로 이동하도록 하는 방법은 무엇일까? 그리고 switch문의 마지막에는 보통 case로 분기처리한 케이스 외에 다른 경우의 수를 위해 default 블록를 추가하는데 default 블록만 추가한다고 분기처리가 안전하다고 볼 수 있을까? unknown 키워드는 언제 쓰일까? # 🥨 switch문에서의 바인딩과 where절 우리는 언제 switch문에서 바인딩과 where절을 사용할 수 있을까..

Swift 2023.09.27