본문 바로가기
코딩 공부/web & Java

[Spring] 지연 초기화

by 현장 2023. 10. 4.

지연 초기화

초기화 작업을 미루다가 사용자가 필요로 할 때 진행하는데, 이 방법을 통해 메모리 낭비를 줄일 수 있다는 장점이 있다. 그리고 이는 퍼포먼스의 향상으로 이어집니다.

 

이 지연 초기화를 사용할 때에는 @Lazy라는 어노테이션을 통해서 사용을 하게 됩니다.

@Component
class ClassA {

}

@Component
@Lazy // 지연 초기화
class ClassB {
    private ClassA classA;

    public ClassB(ClassA classA) {
        // Logic
        System.out.println("Some Initialization logic");
        this.classA = classA; // ClassA 초기화
    }

    public void doSomething(){
        System.out.println("Do Something");
    }
}

@Configuration
@ComponentScan
public class LazyInitializationLuncherApplication {

    public static void main(String[] args) {
        try (var context =
                     new AnnotationConfigApplicationContext
                             (LazyInitializationLuncherApplication.class))
        {
            System.out.println("Initialization of context is completed");
            context.getBean(ClassB.class).doSomething(); // 이 것이 실행될 때 초기화
        }


    }
}

 

즉시 초기화와 지연 초기화

  즉시 초기화 지연 초기화
초기화 시간 어플리 케이션 실행이나 Spring context가 시작될 때 초기화 된다 어플리 케이션이 처음 사용될 때 초기화 된다.
Default O X
사용법 기본값이므로 안써도 되고 @Lazy(value=false)로 명시해도 된다. @Lazy 혹은 @Lazy(value=true)
초기화 오류 발생시 어플리케이션이 실행되지 않음 런타임 오류가 발생
사용 빈도 자주 사용됨 드물게 사용
메모리 사용량 시작시 전부 로드 되므로 즉시 초기화 보다 많다. 즉시 초기화보다 적다.
적합한 상황 거의 모든 Bean에 적합함 시작시 Bean을 로드하지 않고 사용해야 할 경우

'코딩 공부 > web & Java' 카테고리의 다른 글

[Spring] @PostConstruct와 @PreDestroy  (1) 2023.10.06
[Spring] Bean 스코프  (0) 2023.10.05
[Spring] @Component와 @Bean의 차이  (1) 2023.10.02
[Spring] Spring Bean  (0) 2023.10.01
HTTP multipart/form-data  (0) 2023.06.29