728x90
스위프트 네이티브 객체
- 스위프트의 클래스 타입은 objective-c와 호환성을 유지하는 객체, 호환 되지 않는 네이티브 객체로 사용할 수 있다.
- Pen이라는 네이티브 클래스가 있다고 가정
- 해당 객체에 대해서 swift 컴파일러가 생성한 swift 중간 언어 (SIL)에 생성 함수와 소멸 함수가 만들어짐
- 이름 변형 : 컴파일 과정에서 init(), deinit()을 프로그램 내부에서 고유하게 구분하기 위해 이름을 바꿈
- 컴파일러는 원래의 함수 이름을 주석으로 표시해줌 EX) //class.Pen.init
- objective-c는 -init과 +alloc 함수가 나뉘어져 있지만 swift 네이티브 객체는 allocating_init() 함수 내부에서 alooc_ref(), init() 메서드를 호출해서 메모리 할당 및 객체 인스턴스 내부 프로퍼티 초기화를 진행한다.
- 변수들에 대해 getter/setter 함수 생성
- //class.Pen.id.getter : Swift.Int
- //class.Pen.time.getter : Swift.Int
- //class.Pen.time.setter : Swift.Int
- //class.Pen.time.materializeForSet : Swift.Int0 : computed Property나 lazy var처럼 선언한 변수에 대한 초기 값을 바로 할당하지 않는 경우, null값에 대한 optional 처리를 하여 안전하게 값을 설정할 때 사용한다.
- let으로 선언한 id는 setter 함수가 없다.
import Foundation
class Pen {
let id = 101010
var time = 1023
}
스위프트 오브젝티브-C 호환 객체
- 오브젝티브-C 객체와 호한성을 주기 위해서 NSObject 상속 받기
- //@objc class.Pen.init() -> Pen
- 스위프트 네이티브 객체와 다른 점
- deinit()에 해당하는 소멸함수가 없다.
- @objc가 붙은 호환성 함수가 생긴다. -> 내부 함수 init()을 호출해주는 역할
import Foundation
class Pen: NSObject {
let id = 101010
var time = 1023
}
스위프트 중간 언어 (SIL)
- swift 컴파일러(swiftc)는 swift로 작성한 코드 파일을 읽어서 SIL로 만들고 LLVM IR로 변환한다.
- LLVM IR 최적화기를 거쳐서 최종적으로 Target Machine에 맞는 기계코드(MC)를 생성한다.
728x90
'Swift' 카테고리의 다른 글
[Swift] Any, AnyObject (0) | 2021.06.21 |
---|---|
[Swift] defer (0) | 2021.06.21 |
[Swift] 가변매개변수 (Variadic Parameters) (0) | 2021.06.13 |
[Swift] class 키워드 vs static 키워드 (0) | 2021.06.02 |
[Swift] ARC (Auto Reference Counting) (0) | 2021.05.31 |
댓글