BIBI BLOG

[Swift] self와 Self를 구분하는 법: 차이점과 예시 본문

iOS/Swift

[Swift] self와 Self를 구분하는 법: 차이점과 예시

BIBI⭐️ 2025. 4. 9. 08:52
728x90

1. self 란?

  • 정의: self는 현재 인스턴스(객체) 자신을 가리키는 키워드입니다.
  • 언제 사용하나요?: 클래스나 구조체 안에서 자기 자신의 프로퍼티나 함수를 부를 때 사용합니다.

예시

class Person {
    var name: String

    init(name: String) {
        // 이니셜라이저에서 매개변수와 프로퍼티 이름이 같을 때 구분하기 위해 사용합니다.
        self.name = name
    }

    func sayHello() {
        // 자신의 name 프로퍼티를 사용합니다.
        print("안녕하세요, 저는 \(self.name)입니다.")
    }
}

let student = Person(name: "민수")
student.sayHello()
// 출력: 안녕하세요, 저는 민수입니다.

위 예시에서 self.namePerson 객체(인스턴스)의 name을 의미합니다.


2. Self 란?

  • 정의: Self는 현재 타입(클래스, 구조체 등) 자체를 가리키는 키워드입니다.
  • 언제 사용하나요?: 특정 문맥에서 “이 타입 자체”를 나타내야 할 때 사용합니다.

예시

아래 예시에서 Self 키워드는 자기 자신의 타입을 반환해야 하는 경우에 활용됩니다.

protocol Copyable {
    func clone() -> Self
}

struct Message: Copyable {
    var text: String

    // clone 메서드는 자기 자신의 타입을 반환해야 하므로 반환 타입을 Self로 표시합니다.
    func clone() -> Self {
        return Message(text: self.text)
    }
}

let original = Message(text: "예시 문구")
let copied = original.clone()
print(copied.text)
// 출력: 예시 문구

위 예시에서는 SelfMessage 구조체를 의미하므로, clone() 메서드에서는 새로운 Message 인스턴스를 생성해 반환해야 합니다.


3. self vs Self 비교 정리

  1. 역할이 다릅니다.
    • self: 현재 인스턴스(객체)
    • Self: 현재 타입(클래스, 구조체 등)
  2. 사용 위치가 다릅니다.
    • self: 클래스나 구조체 내부에서 프로퍼티나 메서드를 호출할 때
    • Self: 클래스나 구조체 그 자체를 가리킬 때
  3. 생략 가능 여부
    • self: 혼동이 없다면 생략할 수 있지만, 가독성을 위해 명시적으로 쓰기도 합니다.
    • Self: 특정 상황에서 “타입 그 자체”를 명시해야 할 때 사용하므로, 생략이 불가능한 경우가 많습니다.

🔷 마무리

  • self는 “실제로 만들어진 객체”를 의미하고,
  • Self는 “클래스나 구조체 같은 설계도 자체”를 가리킵니다.
728x90
Comments