swift
swift - Property #5 (self, &, super)
행복하게사는게꿈
2021. 1. 12. 11:35
// self : 인스턴스 멤버 내부에서 접근하면 해당 인스턴스에 접근, 타입 멤버 내부에서 접근하면 형식 자체에 접근
// self.propertyName : 인스턴스 속성에 접근할때
// self.method() : 인스턴스 메소드를 호출할때 대부분 self와 .을 생략
// self[index] : 서브스크립트에 접근할때 사용
// self.init(parameters) : 동일한 형식에 있는 다른 생성자를 호출할 때 사용 self 생략 불가능
class Size {
var width = 0.0
var height = 0.0
func calcArea() -> Double {
// self. 생략가능
return self.width * self.height
}
var area: Double {
// self. 생략가능
return self.calcArea()
}
func update(width: Double, height: Double) {
// 멤버변수와 파라미터 이름이 일치하기 때문에 self. 생략불가
self.width = width
self.height = height
}
func doSomething() {
// 클로저에서 인스턴스 내부 변수에 접근하려면 캡처를 해야하는데 이경우 self 생략불가능
let c = { self.width * self.height }
}
static let unit = ""
static func doSomething() {
// 형식 자체를 나타냄
// 형식 메소드에서 인스턴스 멤버에 접근 불가능
// self.width
// self 생략가능
self.unit
}
}
struct Size2 {
var width = 0.0
var height = 0.0
// 인스턴스가 새로운 인스턴스로 교체
// 이패턴은 생성자를 통해 초기화 할 수 있다는 장점이 있지만 class에서는 사용 불가능
mutating func reset(value: Double) {
// width = value
// height = value
self = Size2(width: value, height: value)
}
}
// self대신 super를 사용한다는 차이점을 빼면 별 다를게 없음
// 상속과 관련이 있기 때문에 class에서만 사용한다. struct에서는 사용하지 않음