웹 개발/웹&프로그래밍

[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)에 대한 비교'인 것 같다.

 

언제 사용하지 않는게 좋은가?

  • 최적화를 통해 성능저하를 해결해야 하는 상황이 아니라면 초기화의 지연을 사용하지 않아야 한다. 어떤 경우에는 디버깅이 어려운 상황이 생긴다.

 

 

출처: https://whiteship.tistory.com/105

        https://www.geeksforgeeks.org/what-is-lazy-loading