self (소문자)
'self'는 "나 자신"을 가리킨다. 클래스나 구조체 안에서 자기 자신을 지칭할 때 사용한다.
struct Person {
var name: String
func introduce() {
print("안녕하세요, 제 이름은 \(self.name)입니다.")
}
}
let person = Person(name: "철수")
person.introduce() // 출력: 안녕하세요, 제 이름은 철수입니다.
여기서 'self.name'은 "내 이름"
Self (대문자)
'Self'는 나의 타입 전체를 가리킨다. 현재 타입 자체를 참조할 때 인것이다.
protocol Cloneable {
func clone() -> Self
}
struct Sheep: Cloneable {
var name: String
func clone() -> Self {
return Sheep(name: "Clone of " + self.name)
}
}
let dolly = Sheep(name: "Dolly")
let clonedSheep = dolly.clone()
print(clonedSheep.name) // 출력: Clone of Dolly
여기서 'Self'는 Sheep 타입 전체를 의미한다.
clone() 함수는 "나와 같은 타입"의 새로운 인스턴스를 반환하게 된다.