---
title: "lazy var 정리"
description: "Swift의 lazy var가 초기화되는 시점과 사용하는 이유. 미세먼지 앱에 적용하며 확인한 지연 초기화 동작을 설명합니다."
canonical: https://blog.skyline23.com/3
language: ko
published: 2021-04-13T20:50:34+09:00
modified: 2022-05-23T15:24:38+09:00
---

# lazy var 정리

![](/blog-covers/lazy-initialization-1536.webp)

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

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

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

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

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

아래는 예시 코드입니다

```swift
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를 사용했을 때 메모리 관리가 어려워질 수도 있다는 글을 본 것 같은데, 나중에 다시 한번 정리해보도록 하겠습니다
