[Swift] self

팔랑이·2023년 6월 12일
post-thumbnail

현재의 클래스 인스턴스에 속한 메서드나 프로퍼티를 가리킬 때 self를 붙여 그 출처를 추척한다.

Swift에서 self는 메서드 내부에 선언된 지역변수 -> 메서드 매개변수 -> 인스턴스 프로퍼티 순서로 그 값의 출처를 찾는다.

class MyClass{
	var myNumber = 1
    
    func addTen() {
    	self.myNumber += 10
    }
}

컴파일러는 위 코드를 보고 self 뒤의 myNumber가 클래스 인스턴스에 속한 myNumber 라는 프로퍼티를 참조하고 있는 것을 알아낸다.

위의 예제에서는 사실 self를 사용하지 않아도 완전한 식이 된다. Swift 공식 가이드에도 self를 굳이 사용하지 않아도 된다고 설명함.


그러나 다음의 클로저 표현식에서는 반드시 self를 사용해야 함.

document?.openWithCompletionHandler({(success: Bool) -> Void in
	if success {
    	self.ubiquityURL = resultURL
    }
})
  • 위와 같이 프로퍼티나 메소드를 클로저 표현식 내에서 참고할 경우, 반드시 self를 사용해야 오류가 나지 않는다.

또한, 함수의 매개변수가 클래스 프로퍼티와 동일한 이름을 가질 경우 self를 사용하면 클래스 프로퍼티에서 값을 참조해 온다. 이를 통해 모호함을 해결 가능.

class MyClass {

	var myNum = 10 //클래스 프로퍼티
    
    func addTen(myNum: Int) {
    	print(myNum) //함수의 매개변수 값을 출력
        print(self.myNum) //클래스 프로퍼티 값을 참고하여 출력
    }
}

앞서도 말했지만, Swift를 사용하며 반드시 self를 사용해야 하는 것은 아니다. 이는 프로그래머의 취향에 달렸음.


📚 참고도서
[SwiftUI 기반의 iOS 프로그래밍]

profile
정체되지 않는 성장

0개의 댓글