본문 바로가기

iOS/Swift4

[Swift] Copy-on-Write(CoW) 알아보기 Copy-on-Write Write가 발생했을 때 Copy를 수행한다. Copy on write는 데이터를 복사할 때 먼저 참조를 통해 불필요한 복사를 줄이고, 데이터 변경이 발생하는 경우에만 실제로 복사를 하는 리소스 관리 기법이다. 이는 원래 운영체제에서 프로세스에게 프레임을 할당할 때 메모리 공간 낭비를 막기 위해 사용되던 기능인데 Swift에도 비슷한 목적으로 적용되었다. 예를 들어 1000개의 요소가 있는 배열이 있고 해당 배열을 다른 변수에 복사해야 하는 경우 두 배열이 같더라도 Swift는 1000개 요소를 모두 복사하여 새로운 메모리 공간에 할당해야 한다. 이처럼 엄청난 양의 같은 데이터를 복사하는 것은 비용이 많이 드는 작업이며 낭비이다. 그래서 사용되는 것이 Copy on write이다.. 2022. 10. 2.
[Swift] Class와 Struct의 차이 Swift는 클래스와 구조체를 제공한다. 그렇다면 언제 구조체를 사용해야 하고 언제 클래스를 사용해야 할까? 클래스와 구조체의 가장 큰 차이는 '메모리 저장 방식의 차이'이다. 클래스(Class) - 참조 타입 (Reference Type) - 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가리키는 변수는 스택에 저장하고 메모리 주소값이 힙을 가리킨다. - 복사 시 값을 전달하는 것이 아니고, 저장된 주소를 전달한다. - 힙(Heap)의 공간에 저장, ARC 시스템을 통해 메모리를 관리한다. - 상속이 가능하다. 구조체(Struct) - 값 타입 (Value Type) - 인스턴스 데이터를 모두 스택(Stack)에 저장한다. - 복사 시 값을 전달할 때마다 복사본을 생성한다. (다른 메모리 공간 생.. 2022. 9. 29.
[Swift] 옵셔널 패턴(Optional Pattern) 옵셔널 타입(Optional Type)이 실제로 어떻게 구현되어 있는지 내부를 들여다보자. 옵셔널은 Enum(열거형) 타입으로 구현되어 있고, 두 가지 케이스를 가지고 있다. 값이 associated value 로 들어있는 some 케이스와, 값이 없는 none 케이스가 있다. 또한 Generic으로 선언되어 있어 Int, String 등 어떤 타입이든 가질 수 있다. enum Optional { case some(Wrapped) case none // nil } 열거형 케이스 패턴(Enumeration Case Pattern) 옵셔널 자체가 열거형이기 때문에 옵셔널은 아래와 같이 switch 구문을 통해 값이 있고 없음을 확인할 수 있다. let num: Int? = 10 switch num { cas.. 2022. 9. 28.
[Swift] 옵셔널 바인딩(Optional Binding) Optional 값이 있을 수도 있고 없을 수도 있다. Optional은 값이 대입되어 있거나, 아니면 아무런 값이 대입되지 않은 상태(nil)인 type을 말한다. String? 이라고 표현되면 해당 변수가 String을 갖고 있거나, 아무 값도 없는(nil) 상태라는 것이다. 이는 type casting이나 nil value 체크 등에 있어서 중요한 역할을 한다. Optional Unwrapping 옵셔널 값은 랩에 둘러싸여 있어 사용하기 위해서는 unwrapping 하는 과정이 필요하다. 강제 해제 (Forced Unwrapping) 아래와 같이 간단하게 !를 사용하여 forced unwrapping을 할 수 있다. 값이 있다는 것이 확실할 때 느낌표(!)를 쓰면 값을 제대로 출력할 수 있다. 하지.. 2021. 11. 24.