해결된 질문
작성
·
60
0
@Bean
public PasswordEncoder makePassword() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
이거를 싱글톤 객체로 만들어주셨는데요
그런데
String encodedPassword = passwordEncoder.encode(memberSaveReqDto.getPassword()); 이부분을 static 으로 두고 참조변수를 사용해서 사용하는 것과 어떤 차이가 있나요?
찾아보니 전역변수는 static 이니까 메모리에 미리 올라가고 싱글톤은 사용할떄 올라가는 장점이 있다고 하는데
이 예시는 어차피 클래스 초기화될 때 생성되니까 그런 장점이 없을 것 같은데...
궁금합니다.
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다. 열심인 참새님.
싱글톤 객체와 static
사용에 대한 질문 주셨습니다. 이는 Spring 프레임워크 내의 빈 관리와 Java의 메모리 관리 차이를 이해하는 데 중요합니다. 기본적으로 두 방법은 단일 인스턴스를 제공하지만, 사용 맥락에서 큰 차이가 있습니다:
싱글톤 객체: Spring에서 @Bean
어노테이션을 통해 싱글톤 빈을 정의하면, Spring IoC 컨테이너가 관리하는 방식입니다. 이는 의존성 주입을 가능하게 하고, Spring의 나머지 기능(예: 트랜잭션 관리, AOP 등)과 연동 가능합니다. 빈은 컨테이너에 의해 인스턴스화되고, 주입될 때 유연성을 가지고 있습니다.
static
방식: static
메서드나 변수는 클래스 로딩 시 메모리에 적재되며, 객체 인스턴스 생성 없이 접근 가능합니다. 그러나 이러한 방식은 객체 지향의 원칙을 제한하게 됩니다. 코드의 재사용성과 테스트 능력에 제약이 생기며, 특히 의존성 주입과 같은 기능은 사용할 수 없습니다.
이 예시에서 PasswordEncoder
를 static
으로 두는 것은 싱글톤 빈을 사용했을 때 얻는 이점들을 놓치는 결과를 초래할 수 있습니다. Spring이 제공하는 다양한 부가 기능들을 활용하려면 싱글톤 빈으로 관리하는 것이 더 바람직한 방식입니다.
관련하여 더 많은 예제가 있는 게시물을 참고하시면 전체적인 맥락을 이해하는 데 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 이전에 지식공유자님의 답변을 참고하여 유사한 질문 링크를 추천해드리고 있습니다. 현재 베타 기능으로 인해 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.