dynamic
objc
- 메세지 호출(메세지 디스패치)
- 메서드를 호출 하거나 프로퍼티를 참조하는 것
- objc 런타임의 동적 바인딩 속성과 관련
- 호출자가 “메서드 f를 실행” 메세지를 객체에 전송하면
- 객체는 구현체를 찾아 실행하게 됨
- 여기서 메서드를 찾는다 는 것이 중요
- 정적 디스패치의 경우 실행될 구현코드가 고정되어 있음
- 동적 디스패치의 경우 구현코드를 바꿔치기 할 수 있음
- 이런 기법을 메서드 스위즐링(swizzling)이라 부름
swift
dynamic
키워드는 함수나 변수의 선언문에 적용- 정적 디스패치 대신 동적 디스패치 를 사용하도록 함
dynamic
을 쓰면 자동으로@objc
어트리뷰트를 추가하게 됨dynamic
키워드가 적용된 것은 swift 런타임 대신, objc 런타임을 사용하여 메세지 전송
사용 용도
- 앱 분석을 위한 코드를 동적으로 삽입할 때
- KVC/KVO에 의존적인 Core Data와 같은 objc 런타임과 효율적인 연동 가능
- Objc 에서 오랫동안 사용하던 것들을 swift에 그대로 사용하고 싶을 때 사용
출처: https://outofbedlam.github.io/swift/2016/01/27/Swift-dynamic/