self를 언제 쓸까?
- self ⇒ 클래스나 구조체의 인스턴스 자기 자신을 의미한다.
- 인스턴스 변수인지 지역변수인지를 명확하기 위해서 self를 활용한다.
- Objective-c 개발자들은 무의식적으로 self를 쓰는 경향이 있다!
Compiler가 self를 강제할 경우
- Initializer에서 모호함을 피하기 위하여
@escaping
closure에서 무의식적으로 생기는 강한 참조 문제를 피하기 위하여
강제하는 경우 (1) - Initializer에서의 모호함 피하기
- 아래와 같이 파라미터로 받는 변수와 인스턴스 변수는 naming이 동일하다. 이럴 경우에 둘 간의 모호함을 피하기위하여
self
를 붙히게된다.
struct People {
let name: String
init(name: String) {
self.name = name
}
}
강제하는 경우 (1) - @escaping
closure에서의 강한 참조 문제
@escaping
클로져 안에서 인스턴스 변수를 활용할 경우, 캡쳐가 일어날 수 있다. 이럴 경우에 강한 참조가 일어날 수 있는데, 이걸 self를 무조건적으로 붙히게 하여 캡쳐가 일어날 수 있음을 의식적으로 알려주려는 의도가 있다.
- 현재의 Swift는 class의 instance를 참조할 때만 self를 붙히게 강제한다!