lazy closure를 이용한 View 초기화

Lena·2020년 3월 10일
2
post-thumbnail

lazy ?

  1. 지연 저장 프로퍼티.
  2. 호출이 있어야 값을 초기화하는데, 이 때 lazy 키워드를 사용합니다.
  3. 잘 사용하면 불필요한 성능저하나 공간 낭비를 줄일 수 있습니다.
  4. var 키워드를 사용해 변수로 정의합니다. let 키워드(상수)는 초기화 전에 인스턴스가 완전히 생성되어야 하므로 사용에 적합하지 않습니다.

2번에서 호출이 있어야 값을 초기화한다는 말은,
간단히 말해서 lazy로 선언한 코드에 접근해서 실행시키기 전까지는 인스턴스화 되지 않는다고 할 수 있습니다.

lazy closure?

아래는 UILabel을 lazy closure를 이용해 초기화한 예시.

class ViewController: UIViewController {

    lazy var label: UILabel = {
        let label = UILabel(frame: .zero)
        label.translatesAutoresizingMaskIntoConstraints = false
        label.textColor = .black
        label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
        return label
    }()
    
        override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(label)   
    }
}
  • 저장 프로퍼티보다 지연 저장 프로퍼티를 사용하는 것의 주요 이점은 코드 블럭이 정확히 해당 변수의 읽기 작업이 일어날 때만 실행된다는 것입니다.

  • 이 경우에는 ViewController 인스턴스가 생성될때 바로 lazy로 선언된 클로저(예시에서 label)가 실행되지 않습니다. 그리고 viewDidLoad()메소드 addSubView(label)에서 처음 호출할 때 실행되고 한 번만 인스턴스화 됩니다. 즉, UILabel 뷰의 생성시점을 늦출 수 있습니다.

참고한 자료

  1. Lazy initialization in Swift
  2. Swift - Lazy Var vs. Let when creating views programmatically (saving memory)
  3. [Swift] lazy Variables
  4. 스위프트 프로그래밍 3판

궁금한 점, 틀린 내용, 오타 지적, 오역 지적 등 피드백 환영합니다! 댓글로 남겨주세요!
😊 🙏

profile
개발 공부하고 있어요!

0개의 댓글