지연 초기화

스택 오버플로에서 문제 해결 방법을 검색하는 동안 자주 언급되는 특정 용어와 구문을 발견했습니다. 내가 보는 가장 일반적인 것 중 하나는 지연 초기화입니다. 왜 우리는 게으른 것을 원합니까? 간단히 말해서 지연 초기화는 나중에 필요할 때까지 개체 초기화를 지연시키는 개념입니다. 응용 프로그램이 많은 개체를 생성할 때 각 개체에서 수행하는 작업이 합산될 수 있습니다. 이러한 작업이 즉시 필요하지 않은 경우 즉시 수행하고 시스템을 중단시키는 이유는 무엇입니까?

public class LazyInit {

    private static Resource resource;

    public static Resource getResource() {
        if (resource == null) {
            resource = new Resource();
        }
        return resource;
    }
}


Maciej Najbar가 게시한 기사에서 가져온 코드 조각을 사용하여 단일 스레드 구현의 예를 볼 수 있습니다. Singleton 디자인 패턴을 사용해 본 사람들에게는 이것이 친숙하게 보일 수 있습니다. 클래스는 Resource 개체 이름 리소스에 대한 자리 표시자를 만듭니다. getResource() 메서드를 사용하여 개체가 값으로 초기화되었는지 또는 null인지 확인하기 위해 개체를 검사합니다. null이면 반환된 값으로 할당되고 그렇지 않으면 이미 할당된 값만 반환합니다. 이를 통해 프로그래머는 객체 생성 시 생성자가 아닌 getResource() 메서드를 사용하여 초기화가 발생할 때 조건을 만들 수 있습니다.

게으름을 피울 수 있는 경우에 대한 예
  • 웹 애플리케이션에서 이미지 로드
  • 자바 스프링 부트 빈
  • 데이터베이스 연결
  • 블로그 게시물

  • 모든 것과 마찬가지로 고려해야 할 몇 가지 단점이 있습니다. 지연 로딩은 단순히 객체를 초기화하는 것보다 시스템에 더 많은 부담을 줍니다. 이것이 모든 것이 그렇게 구현되지 않는 이유입니다. 일부 시스템에서는 올바르게 구성하기 위해 이러한 개체를 즉시 생성해야 할 수 있습니다. 또한 초기화할 때까지 오류나 예외가 발생하지 않으므로 디버그하기가 더 어려울 수 있습니다. 프로그래밍의 모든 것과 마찬가지로 구현하기 전에 고려해야 할 장단점이 있습니다. 애플리케이션에 지연 로딩을 추가하기 전에 시스템의 비용을 측정해야 합니다.

    자원:
  • Najbar, M. (2019년 1월 23일). 지연 초기화 - 올바른 구현은 무엇입니까? 중간. https://medium.com/android-news/lazy-initialisation-whats-a-correct-implementation-64c4638561e에서 2021년 9월 19일에 확인함.
  • Maayan, G. D. (2020년 12월 25일). Don't LAZY: 지연 로딩의 3가지 문제와 즉시 로딩을 사용할 때. 해커 정오. https://hackernoon.com/dont-be-lazy-3-problems-with-lazy-loading-and-when-to-use-eager-loading-qq1d34cl에서 2021년 9월 19일에 확인함.
  • 좋은 웹페이지 즐겨찾기