디스패치 학습하기 (4) [ Extension Dispatch ]
·
프로그래밍언어/swift
이번 학습은 extension에서 동작하는 dispatch를 알아보자.extension을 할 수 있는 3가지 경우는 다음과 같다.값 타입에서 확장래퍼런스 타입에서 확장프로토콜에서 확장각 각의 상황에서 어떤 디스패치가 동작하는 지 알아보자. Value Type 확장 시 Dispatch상속의 가능성이 없기 때문에, 확장(exension)을 해도 Static Dispatch로 동작한다. struct Human { func sayHello() { print("Hello Human!") }} extension Human { func sayHo() { print("Ho~~") }} let human: Human = .init()human.sayHello() ..
디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]
·
프로그래밍언어/swift
이번에는 단순한 값 타입과 프로토콜을 이용 했을 때 동작하는 Dispatch를 알아보자 Value Type에서의 DispatchValue Type인 구조체, 열거형은 상속을 할 수 없다는 특징 때문에 오버라이딩이 될 가능성이 없고, 따라서 Static Dispatch 를 사용한다 Protocol에서의 Dispatch프로토콜은 기본적으로 메서드의 선언부만 제공하기 때문에 실제 사용할 때 프로토콜 타입을 참조로만 사용할 경우 해당 인스턴스에 맞는 메서드를 호출해야하므로 Dynamic Dispatch를 사용한다.  두개의 struct가 Human 프로토콜을 채택했지만 왼쪽은 값타입인 구조체를 이용했기 때문에 Static Dispatch가 이루워지고 오른쪽은 프로토콜을 타입을 사용했고 해당 인스턴스 타입에 맞..
디스패치 학습하기 (2) [ Reference Type Dispatch, final ]
·
프로그래밍언어/swift
Reference Type에서의 Dispatch대표적으로 class는 상속 가능성이 있다. 따라서 서브 클래스에서 함수를 호출할 수 있기 때문에 이 때 Dynamic Dispatch를 사용한다. 아래 코드는 다음과 같은 구조를 같는다.  여기서 cat은 Animal(상위) 타입으로 되어있지만 Cat 인스턴스를 업캐스팅해서 가르키고 있는 상황이다.이때는 Animal의 speak를 참조해야하는 것이 아니라 Cat의 speak를 참조해야한다.이처럼 오버라이딩의 가능성이 있으면 어떤 함수가 실행되야할지는 런타임 때 알 수 있기 때문에 vtable을 무조건 참조해야하고 이런 동작을 Dynamic Dispatch라고 부른다. 그렇다면 상속으로 인한 오버라이딩의 가능성이 Dynamic Dispatch를 야기한다면 상..
디스패치 학습하기 (1) [ 정의, 종류, vtable, witness table ]
·
프로그래밍언어/swift
디스패치란Dispatch란 어떤 메서드를 호출한 것인지를 결정하여 그것을 실행시키는 메커니즘입니다.Dispatch는 2가지 종류가 있는데 구분하는 기준은 내가 호출한 함수를 컴파일 타임에 결정하냐런타임에 결정하냐에 따른 방식으로 나뉩니다.  종류 Static Dispatch (Direct Call)Dynamic Dispatch (Indirect Call)호출 함수 결정 시기컴파일 타임에 결정런타임에 호출될 함수 결정속도매우 빠름static Dispatch 보다 느림사용 타입값 타임에 사용래퍼런스 타입vTable 사용XO vTable vs Witness Table디스패쳐 설명에 들어가기 전에 알고가면 좋은 Table 두개가 있다.각 Table의 역할을 보고 추후 Dispatch 설명 관련에 등장할 때 당황..