본문 바로가기
iOS/Swift

Swift) self vs Self

by Jiseong 2022. 2. 20.

self vs Self

 

그냥 간단하게..

self

소문자로 이뤄진 self의 경우, 특정 인스턴스에 접근할 때 사용하는 참조값이다.

 

자기 자신의 인스턴스를 가리키는 프로퍼티로, 용도는 다음과 같다.

The self expression is used to specify scope when accessing members, providing disambiguation when there’s another variable of the same name in scope

명확성을 위해

class SomeClass {
    var greeting: String
    init(greeting: String) {
        self.greeting = greeting
    }
}

인스턴스 프로퍼티로 선언된 greeting이라는 변수와, 이니셜라이저 파라미터인 greeting이 사용자(개발자)와 컴파일러로 하여금 애매하게 여겨질 수 있기때문에, 이러한 상황에 명확성을 부여하기 위해 사용된다.

 

난 이왕이면 self를 적어 명시해주는 편이다.

Self

타입은 타입인데 특정한 타입이 아니란다. 그냥 특정 타입들을 편하게 참조, 가리키기 위한 것이다.

 

아래는 애플 예제이다.

class Superclass {
    func f() -> Self { return self }
}

let x = Superclass()
print(type(of: x.f()))
// Prints "Superclass"

class Subclass: Superclass { }
let y = Subclass()
print(type(of: y.f()))
// Prints "Subclass"

위 코드에서 type(of:x.f())는 x.f()와 같다. 이처럼 Self는 각 타입을 참조하고 있는 것이다.

 

또한 Self는 상황에 따라 의미가 다를 수 있는데, 프로토콜과 클래스를 들어보겠다.

 

먼저 프르토콜의 경우

프로토콜 내부의 Self는 자신(프로토콜)이 아닌 자신을 채택한 타입을 의미한다.

 

그리고 클래스의 경우

In the members of a class declaration, Self can appear only as follows:

  • As the return type of a method
  • As the return type of a read-only subscript
  • As the type of a read-only computed property
  • In the body of a method

해당 인스턴스의 타입 자체를 표현하고, 메소드에서 반환값으로만 사용 가능하며, 메소드 내부에선 사용이 불가하다.

'iOS > Swift' 카테고리의 다른 글

[Swift] Increasing Performance by Reducing Dynamic Dispatch  (0) 2022.04.22
Swift) COW(Copy On Write)  (0) 2022.02.20
Swift) hitTest  (0) 2022.02.20
Swift) CoreData  (0) 2022.02.20
Swift) UIAlertController ActionSheet Programmatically  (0) 2022.02.20

댓글