[TIL] lazy

박주하·2025년 7월 3일

lazy


  • 변수를 실제로 사용할 때까지 초기화를 미룬다는 의미
  • 메모리를 아끼고, 불필요한 계산을 줄이는 데 효과적

lazy를 쓰면 좋은 이유

  • 초기화 비용이 비싼 경우 → 무거운 작업을 나중에 실행 가능
  • 메모리 아끼고 싶을 경우 → 처음부터 생성 ❌
  • 순환 참조/타이밍 문제가 있을 경우 → viewDidLoad 이후 접근 시 유용
  • self를 필요로 하는 경우 → self가 완전히 초기화된 후 실행됨

예제

1. 무거운 계산이 필요한 경우

struct Profile {
    lazy var introduction: String = {
        print("자기소개 생성 중...")
        return "안녕하세요, 저는 Luna입니다."
    }()
}

var p = Profile()
print("아직 초기화 안 됨")
print(p.introduction) // 이때 비로소 초기화됨

/*
출력 결과:
아직 초기화 안 됨
자기소개 생성 중...
안녕하세요, 저는 Luna입니다.
*/

2. 뷰컨트롤러에서 뷰 초기화

class MyViewController: UIViewController {
    
    lazy var redView: UIView = {
        let view = UIView()
        view.backgroundColor = .red
        view.layer.cornerRadius = 10
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(redView) // 이 시점에 redView가 생성됨
    }
}
  • 뷰를 바로 만들지 않고, 뷰 계층에 추가하는 시점까지 기다림
  • self를 참조해도 안전함 → self가 완전히 초기화된 이후 실행되기 때문

💡 주의사항
lazy는 반드시 변수 (var)로 선언해야 함❗️

lazy let title = "Hello" // ❌ 오류!

0개의 댓글