웹 개발/웹&프로그래밍
[Programming] lazy가 뭣이여?(lazy, lazy loading, lazy initialization)
희랍인 조르바
2019. 9. 29. 15:56
lazy라는 개념에 대해 정리해두면 좋을 것 같음.
내가 이해한 'lazy'의 개념: 프로그래밍에서 lazy라는 개념은 필요할 때, 바로 실행하지 않고 미루다가 필요한 순간 그때 어떠한 행위를 하겠다는 의미로 생각된다.
geeksforgeeks에서 설명하는 lazy loading이란?
- on-demand loading으로도 불린다. 여기서 on-demand란 '요구가 있을 때는 언제든지'라는 의미이다.
- 온라인 콘텐츠(웹앱이나 웹사이트)의 기술 최적화이다.
- 전체 웹페이지를 로딩하는 것이 아니라 유저가 필요할 때까지 미루고 남겨두었다가 원하는 부분에 대해서 요구하는 순간에 로딩하는 것이다.
- 대표적인 예로 무한 스크롤이 있다. 웹 페이지를 유저가 내릴 때 로딩된다.
lazy initialization
의미
- 객체를 필요할 때 만들겠다는 뜻이다.
언제 사용할까?
- lazy initialization은 필드값을 필요하기 전까지 초기화되는 것을 원하지 않고, 실제로 사용하고 계산하고자할 때 유용하다.
- 자주 사용하지 않고, (초기화를 빨리 수행하고 부가작업을 뒤로 미루고 싶을 때 적합하다. <- lazy init을 하지 않으면 처음부터 객체가 생성되어있으니 lazy init을 하지 않는 편이 더 초기화를 빨리하는 방법 아닌가?)
- 요점은 '필요할 때마다 객체를 생성하는 비용(lazy init)과 메모리에 객체를 계속 유지하도록 하는 비용(init)에 대한 비교'인 것 같다.
언제 사용하지 않는게 좋은가?
- 최적화를 통해 성능저하를 해결해야 하는 상황이 아니라면 초기화의 지연을 사용하지 않아야 한다. 어떤 경우에는 디버깅이 어려운 상황이 생긴다.