swift

swift - Property #5 (self, &amp, 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에서는 사용하지 않음