Advanced Swift 4

swift - 상속 또는 참조(reference)의 사용없이 polymorphism(다형성)을 지향 방법

앞선 글에서 class의 사용을 지양하자 했는데, 그렇다면 swift는 struct의 사용을 지향합니다. 그런데 struct에서는 상속이 없어 다형성을 구현 못하는데, 어떻게 해야될까요? 바로 프로토콜을 이용하자 입니다! 영상에서 이제 질문을 한개 합니다. d.draw()를 여러번 호출하면서 무슨 draw가 Line의 Point 중 누구의 것인지 어떻게 알 수 있을까요? 정답은, protocol witness table을 사용하라 합니다. Drawable protocol에 순응하는 Point와 Line에 대한 테이블을 각각 생성합니다. 그리고 각 테이블의 draw는 실제 draw의 구현을 참조하게 됩니다. 즉 정리하면, struct를 통해서도 다형성을 갖게 할 수 있습니다. 바로 프로토콜을 사용해서. 다..

Advanced Swift 2022.12.20

swift - method dispatch : 메소드 디스패치

일단 스위프트에는 static dispatch와 dynamic dispatch가 있다. static dispatch 위 처럼 drawAPoint 메소드가 Point안의 struct의 draw 메소드인 경우, 호출 타이밍이 너무 명확한 경우 컴파일러는 static하게 디스패치 해버린다. 이 경우 drawPoint 호출시 이중으로 스택에 불필요하게 세팅되었을 오버헤드가 사라진다. dynamic dispatch 스위프트에서 다이나믹 메소드 디스패치가 사용되는 경우는 위처럼 다형성이 사용되는 경우일 수 있다. (다형성 객체의 메소드라고 무조건 다이나믹 디스패치는 아님; 호출 시점이 명확하면 컴파일러가 알아서 스태틱 디스패치로 하기도한다 함) 어쨌든, 위 경우를 보면 drawables가 다형성에 의한 배열이라 d..

Advanced Swift 2022.12.20

swift enum의 장점은? enum이란 무엇인가.

enum을 지금까지는 그냥 정해진 제한 범위내의 값을 사용하기 쉽게 모아놓은 타입이라 생각했는데, 메모리 공간을 공부하다 보니 stack에 저장되는지 heap에 저장되는지 매우 중요했다. reference count 때문인데, 이것이 적을수록 좋기 때문에, 가급적 string보다 enum 사용이 좋은 경우가 있더라. 그래서 enum의 특징을 찾았는데, 해석해보면. They are stored in stack They have no inheritance They don’t require explicit initializer They can conform to protocols It can have extensions It even can have methods and computed properties(n..

Advanced Swift 2022.12.20

swift string은 Stack, Heap 둘중 어디에 저장될까?

정답은 heap이다... 그런데 string은 value 타입임. 즉 swift에서 저장 공간과 value, reference 타입은 관계가 없다. 즉 value 타입이라고 항상 스택에 저장되는게 아니다. 하지만 string은 짧은 문자열은 스택에 저장되기도 한다 함(16바이트 이하)...? string이 heap에 저장되는 이유에 대해 알아보자. array, dictionay, set, string(collection of char)과 같이 가변 길이의 Collection들은 내부 데이터를 힙에 저장한다. 컴파일 타임에 그 사이즈를 정확히 알기 어려워 heap에 할당 후 사이즈를 조절한다. 주로 스택에 저장되는 경우는 변수의 생명주기가 static한 경우고, value type의 사이즈가 컴파일 타임에..

Advanced Swift 2022.12.19