[Swift] Nested Type
Nested Type
중첩 타입
[Swift] Method Dispatch
Method Dispatch
매서드 디스패치
- 클래스, 프로토콜의 메서드가 실행되는 방식
Direct Dispatch (직접 / Static)
- 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음 (in-line)
- 가장 빠른 속도 (0.0 - 2.13ns)
- 밸류 타입(구조체/열거형)에 사용
- 상속 / 다형성의 장점을 누릴 수 없음
```swift struct MyStruct { func method1() { print(“Struct - Direct method1”) } // 90~99 메모리 주소에 저장 func method2() { print(“Struct - Direct method2”) } // 100~109 메모리 주소에 저장 }
[Swift] Closure
Closure
클로저
클로저와 함수는 기능은 완전히 동일한데, 형태만 다르다고 생각하면 됨
(파이썬의 lambda / C언어의 Block)
- 함수 : 이름이 있는 코드 묶음 -> 다른 코드가 함수 이름으로 호출하기 위함
func myFunction() -> Int { // function return ... }
- 클로저 : 이름이 없는 코드 묶음 -> 굳이 이름이 없어도 호출할 수 있는 형태로 사용 가능
{() -> Int in // closer return ... } // 보통 컴파일러의 타입 추론이 가능한 경우 리턴형에 대한 표기를 생략하여 많이 사용한다.
스위프트는 함수를 일급 객체로 취급 (함수는 타입의 형태)
- 함수를 변수에 할당할 수 있음
- 함수를 호출할 때, 함수를 파라미터로 전달할 수 있음
- 함수에서 함수를 반환할 수 있음
[Swift] self vs Self
self vs Self
self 키워드
프로덕트 오너
Product Owner
[Swift] Protocol
Protocol
프로토콜
- 특정 기능에 필요한 메소드, 프로퍼티 등을 정의만 해놓은 것
- 클래스와 상속의 단점
- 하나의 클래스만 상속 가능 (스위프트에서는 다중 상속 불가능)
- 기본적인 상위 클래스의 메모리 구조를 따라갈 수 밖에 없음 (필요하지 않은 속성/메서드도 상속)
- 클래스(레퍼런스 타입)에서만 가능
- 스위프트는 프로토콜 지향 언어 (Protocol-Oriented Language)
- 스위프트 표준 라이브러리를 보면 대부분 구조체로 기본 타입이 구현되어있음
- 클래스와는 달리 상속이 불가능한 구조체로 다양한 공통 기능을 가질 수 있는 이유는
Protocol
,Extension
,Generic
때문
```swift class Bird { var isFemale = true func layEgg() { if isFemale { print(“새가 알을 낳는다.”) } } func fly() { print(“새가 하늘로 날아간다.”) } }
[Swift] Date
Date
Date
[Swift] Extension
Extension
확장
[Swift] Type Casting
Type Casting
타입 캐스팅
- 인스턴스 사용시에 어떤 타입으로 사용할지(속성/메서드) 메모리구조에 대한 힌트를 변경하는 것
- 메모리의 값을 수정하는 것이 아니라 단순히 해당 타입의 인스턴스인 것처럼 취급하려는 목적
is 연산자 : 인스턴스 타입을 검사
as 연산자 : 클래스 계층 상의 타입 변환