디스패치 학습하기 (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 설명 관련에 등장할 때 당황..
접근 제한자
·
프로그래밍언어/swift
🔒 접근제한자란?접근제한자는 데이터를 캡슐화의 특징 중 정보 은닉을 담당한다. 종류 외부모듈에서  접근상속override 공개 범위openOOOclass멤버에만 사용, 가장 개방적인 범위publicOOXoverride를 제외하고 open과 동일internalXΔ(내부 모듈)Δ(내부 모듈)외부 모듈에서 접근을 제한fileprivateXΔ(같은 파일)Δ(같은 파일)같은 파일(.swift) 내에서만 접근이 가능한 접근 제한privateXXX같은 스코프 안에서만 가능, 같은 파일안의 extension에서도 접근 가능 은닉 정도 (제약 낮음) open private (제약 높음)특징1) 모든 타입에 적용되는 접근지정자 규칙은 상위 요소보다 하위 요소 가 더 높은 접근수준을 가질 수 없다. 2) 예를 들어 pri..
property 학습하기 (4) [ Property Observer ]
·
프로그래밍언어/swift
이번에는 프로퍼티 observer(관찰자)를 알아보자  Property Observer ( 프로퍼티 관찰자 )프로퍼티 값의 변화를 관찰하는 것으로, 저장 프로퍼티에 추가할 수 있다.프로퍼티에 할당되는 새 값이 현재 값과 동일하더라도 속성 값이 설정되면 호출된다. 종류 willSetdidSet호출 시기값이 저장되기 직전값이 저장된 직후익명 파라미터 이름newValueoldValue 호출 순서옵저버는 연산 프로퍼티에 추가할 수 없지만, override 를 통해 추가할 수 있다.실제르는 거의 안쓰지만 호출 순서를 쉽게 알아보기 위해 적용해보자 class Human { var name = "Unknown" var alias: String { get { print("Hu..
property 학습하기 (3) [ Type Property ]
·
프로그래밍언어/swift
이번에는 타입 프로퍼티의 역할을 학습해보자. Type Property (타입 프로퍼티)모든 타입이 공통적인 값을 정의하는 역할을 한다. 특징1) 클래스, 구조체, 열거형에서 사용된다 2) 저장 타입 프로퍼티와 연산 타입 프로퍼티가 존재하며 저장 타입 프로퍼티의 경우 항상 초기화가 되어 있어야 한다 3) static을 이용해 선언하며, 자동으로 lazy로 작동한다 종류 staticclass저장 프로퍼티 사용 가능OX연산 프로퍼티로 사용 가능OX오버라이딩 가능 XO예시 코드class Human { static var typeStoredProperty1: String = "HELLO" // ❌ 에러발생 class var typeStoredProperty2: String = "H..
property 학습하기 (2) [ computed Property ]
·
프로그래밍언어/swift
이번에는 연산 프로퍼티의 역할을 학습해보자 Computed Property (연산 프로퍼티)저장 공간을 따로 갖고 있지않고 저장 프로퍼티의 값을 읽어 연산을 실행하거나프로퍼티로 전달 받은 값을 다른 프로퍼티에 저장하는 역할을 한다. 특징1) 항상 var로 선언되야한다. 2) getter 와 setter가 존재한다. 3) getter는 필수지만, setter는 필수가 아니다. 4) setter를 명시하지 않으면 get-only가 된다. 종류 인스턴스 연산 프로퍼티타입 연산 프로퍼티사용 프로퍼티 종류인스턴스 저장 프로퍼티타입 저장 프로퍼티lzay 동작 여부XO  예시 코드class Human { var name: String = "BOOST CAMP" // 인스턴스 저장 프로퍼티 static v..