티스토리 뷰

lazy 키워드를 정리하게 된 이유는 코드로 UI를 작성하면서 궁금증이 생겨서입니다.

친구와 let과 private lazy var 둘의 차이점이 무엇일까에 대해 얘기를 나눴었는데 정리하면 좋을 것 같아서 정리를 해봅니다!

 

우선 간단하게 터치를 할 수 있는 버튼을 만들어보겠습니당

let letButton = UIButton().then {
	$0.addTarget(self, action: #selector(letButton), for: .touchUpInside)
}

private lazy var lazyButton = UIButton().then {
	$0.addTarget(self, action: #selector(lazuyButton), for: .touchUpInside)
}
요 둘의 차이가 가장 큰 차이가 무엇일까요?

많은 차이가 있겠지만 가장 큰 특징은 let으로 선언한 버튼은 동작하지 않습니다.

이러한 이슈때문에 친구와 얘기를 나눴던 것인데요!

그 이유를 설명하자면 일반 변수들은 클래스가 생성된 이후에 접근이 가능합니다.

클래스 내의 다른 영역 (메서드, 일반 프로퍼티)에서는 self를 통해 접근할 수 없지만 lazy 키워드를 사용한다면 생성 후 추후에 접근할 것이라는 의미로 self로 접근이 가능합니다!

그렇기 때문에 lazy var로 선언해준 버튼에서만 동작이 가능한 것입니다!

(클로저 안에서 사용한 self는 순환 참조를 일으키지 않기 때문에 그대로 사용할 수 있다고 합니다.)

 

그렇다면 UI를 그리는 코드를 사용할 때 무조건적으로 lazy 키워드를 써야하나?

그렇지 않습니다!

예를 들어 항상 보이는 뷰를 짤 때는 let을 사용하나 lazy var를 사용하나 메모리의 차이가 없습니다.

큰 차이가 나타나는 부분은 뷰가 나타나는 시점입니다!

 

예를 들어 사용자의 액션에 따라 보여지는 뷰(인스타그램 스토리) 같은 경우를 let으로 선언해서 뷰를 짠다고 가정을 해볼게요!

사용자에게 보여지기 전에 이미 메모리를 차지하고 있겠죠?

하지만 lazy로 선언한다면 처음 스토리가 나타나는 시점에 메모리를 차지하고 여기서 let과 lazy var의 메모리 차이가 발생할 것입니다!

간단히 말하자면 항상 필요하지 않은 인스턴스를 다룰 때는 lazy var를 사용하는 것이 좋다고 합니다.

-> 항상 필요한 것은 let을 써도 무방!

 

그 밖에도 다양한 차이점이 있지만 이미 다른 블로그에 정리를 잘 해놓은 것들이 많아서..!!!!

 

정리

  • lazy를 사용하여 만든다면 클로저 내에 self로 접근이 가능
  • 항상 필요하지 않은 인스턴스를 다룰 때는 lazy var 사용한다. 하지만 그렇지 않다면 let으로 선언해도 무방

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함