lazy var 정리

2021. 4. 13. 20:50Swift 기본 문법

이번에 미세먼지 앱을 만들어 보면서 lazy란 개념을 공부했습니다.

기존에 lazy라는 게 있다고 들어는 봤지만, 어떻게 쓰는지도 몰랐고 왜 쓰는지도 몰랐어요.

 

하지만 이번 기회에 왜 쓰는지 정리해보고 싶어서 공부를 시작해보았습니다.

 

lazy는 초기 init시에 초기화되는 것이 아니라 호출될 때 생성이 되면서 메모리에 올라가며 이후 같은 변수를 사용 시 다시 초기화가 진행되지 않고 이전에 생성된 변수를 그대로 사용하더라고요.

또한 클래스나 구조체 내에서만 사용이 가능하다는 특징이 있었습니다.

 

아래는 예시 코드입니다

class Person {
    var name: String
    var age: Int
    
    // 초반 init때 생성되지 않음
    lazy var info: String = {
        return "이름 : \(self.name)\n나이 : \(self.age)"
    }()
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func printInfo() {
        print(info)
    }
}

var p = Person(name: "김부성", age: 18)

// 처음 호출 될때 생성
p.printInfo()

 

만약 호출이 되지 않는다면 객체를 생성하지 않기 때문에 메모리 낭비를 줄일 수 있어 보여요.

또한 초기화 시점이 같을 경우 속성에 접근할 때 에러가 날 수 있는데, lazy를 사용함으로써 해결이 가능합니다.

 

만약 lazy가 없었다면 if로 일일이 값이 있는지 없는지 확인해주었어야겠지만, lazy를 사용함으로써 간편하게 구현이 가능하다는 게 장점이겠네요 :)

 

   lazy를 사용하는 이유

- 지연 저장을 통해 메모리 낭비를 줄임

- 초기화 시점이 같을 때 접근할 수 있음

 

lazy를 사용했을 때 메모리 관리가 어려워질 수도 있다는 글을 본 것 같은데, 나중에 다시 한번 정리해보도록 하겠습니다

'Swift 기본 문법' 카테고리의 다른 글

defer  (1) 2022.05.24