Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

sanichdaniel의 iOS 개발 블로그

WWDC: Better Apps with Value type 본문

swift

WWDC: Better Apps with Value type

sanich8355 2020. 10. 25. 17:18

value 타입에 관한 WWDC 영상을 참고하여 새로알게된 사실들을 정리해보았다.

 

배경지식

value type vs reference type 

value type: 값이 복사될때 (할당, 생성, 인자로 넘겨질때) 매번 독립적인 인스턴스를 만든다.

reference type: 값이 복사될때 참조가 복사되고 인스턴스는 공유된다

 

heap stack 어디 저장되나

Referenct 타입은 heap에 저장되고, 포인터(참조)는 stack에 저장된다.

value type이 class에 포함되거나 closure에 캡쳐되면 heap에 저장된다.

Reference 타입은 항상 heap에 저장, value 타입은 자신이 선언된곳에 저장된다.

 

Local Reasoning

강의 초반에 Local Reasoning이란 term이 나온다.

Local Reasoning이란 한곳의 코드를 보면, 다른 곳의 코드와 어떻게 상호작용해야하는지 생각할 필요가 없는것을 말한다.

팀에 처음 합류해서 코드를 볼때 아는 건 없고, 어떻게 코드들이 상호작용 되는지 몰라 몹시 혼란스러운 경험이 다들 있을것이다.

Local Reasoning이 잘 되어있으면 처음 합류하는 사람도 이해하기 쉽고, 유지보수 하기가 쉽고, 작성하기 쉽고, 테스트 하기가 쉽다.

Value type for Local Reasoning

1. Different variables are logically distinct

Reference 타입의 경우 인스턴스들은 하나의 데이터를 가지고 있다.

따라서 다른곳에서 값이 수정될수도 있다. 이것은 Local Reasoning을 어렵게 한다.

하지만 Value타입의 경우 각 변수들은 논리적으로 구별된다.

하나의 value type 변수의 값을 mutate 한다고 다른 변수의 값에 영향을 끼치지 않는다.

2. Mutability when you want it

let을 붙여 외부에서 값 수정을 못하게 immutable하게 만들 수 있다.

값을 수정하고 싶을때만 var을 붙여주면 된다.

 

내부에서 인스턴스 메서드를 통해 값을 수정하려면 mutating 키워드가 필요하다

3. Copy is Cheap

지금까지 value type의 경우 매번 값이 복사되기에 비효율적이어서 커스텀 타입을 만들때 들고있을 변수들의 수가 적은 경우에만 value 타입을 써야한다 라고 잘못 알고 있었다.

 

하지만 WWDC에 따르면 copy의 값은 constant time이기에 싸다고 한다.

또한 내부적으로 copy-on-write 즉 값이 수정될때 copy가 실제로 일어나기에 더욱 값싸진다.

따라서 value 타입을 쓸수 있는 상황에서는 되도록 value 타입을 쓰자!

'swift' 카테고리의 다른 글

nested function (중첩함수)  (0) 2020.11.15
expression, statement, literal  (0) 2020.10.24
양방향 타입추론  (0) 2020.10.22
Operator Overloading  (0) 2020.10.16
빌드 타임 개선  (0) 2020.10.14