나의 기록, 현진록

[Swift] 10.1.2 지연 저장 프로퍼티 본문

Programming/Swift

[Swift] 10.1.2 지연 저장 프로퍼티

guswlsdk 2021. 7. 16. 11:53
반응형

인스턴스를 생성할 때 프로퍼티 값이 필요 없다면 프로퍼티를 옵셔널로 선언해줄 수 있습니다.

struct CoordinatePoint{
    var x: Int
    var y: Int
}

class Position{
    //현재 사람 위치는 모를 수도 있습니다.
    var point: CoordinatePoint?

    let name: String

    init(name: String){
        self.name = name
    }
}


//이름은 필수지만 위치는 모를 수도 있습니다.
let currentPoint: Position = Position(name: "hyunjin")

//위치를 알게되면 그 때 위치 값을 할당해줍니다.
currentPoint.point = CoordinatePoint(x: 20, y: 10)

 

10.1.2 지연 저장 프로퍼티

그러나 그것과는 조금 다른 용도로 필요할 때 값이 할당되는 지연 저장 프로퍼티가 있습니다. 지연 저장 프로퍼티는 호출이 있어야 값을 초기화하며, 이때 lazy 키워드를 사용합니다. 

 

상수는 인스턴스가 완전히 생성되기 전에 초기화해야 하므로 필요할 때 값을 할당하는 지연 저장 프로퍼티와는 맞지 않기 때문에 var 키워드를 사용하여 변수로 정의합니다.

 

지연 저장 프로퍼티는 주로 복잡한 클래스나 구조체를 구현할 때 많이 사용됩니다. 클래스 인스턴스의 저장 프로퍼티로 다른 클래스 인스턴스나 구조체 인스턴스를 할당해야 할 때가 있습니다. 이럴 때 인스턴스를 초기화하면서 저장 프로퍼티로 쓰이는 인스턴스들이 한 번에 생성되어야 한다면? 또, 굳이 모든 저장 프로퍼티를 사용할 필요가 없다면? 이 질문의 답이 지연 저장 프로퍼티입니다. 지연 저장 프로퍼티를 잘 사용하면 불필요한 성능저하나 공간 낭비를 줄일 수 있습니다.

 

 

struct CoordinatePoint{
    var x: Int = 0
    var y: Int = 0
}

class Position{
    
    lazy var point: CoordinatePoint = CoordinatePoint()

    let name: String

    init(name: String){
        self.name = name
    }
}

let currentPoint: Position = Position(name: "hyunjin")

//이 코드를 통해 point 프로퍼티로 처음 접근할 때
//point 프로퍼티의 CoordinatePoint가 생성됩니다.
print(currentPoint.point)

 

 

 

 

 

반응형