반응형
스프링 DI컨테이너는 디폴트로 싱글톤으로 관리하게 됩니다.
싱글톤은 객체를 매번 새로 생성하지 않아 메모리 관리에 효율적입니다.
하지만 가장 큰 단점은 객체를 공유한다는데 있습니다.
그렇기 때문에 싱글톤은 상태값을 가지면 안됩니다.
왜 상태값을 가지면 안되는지 알아보도록 하겠습니다.
🔍 상태값을 가지면 안되는 이유
싱글톤 객체
@Getter @Setter public class SingletonT { private final static SingletonT instance = new SingletonT(); private String name; public static SingletonT getInstance() { return instance; } public String setLocalVariable(String variable) { return variable; } private SingletonT() { } }
위는 싱글톤 객체이며, 테스트 코드로 실험을 해보겠습니다.
이 테스트는 모두 성공 테스트입니다.
싱글톤은 객체를 공유하기 때문에 user1은 김종국
이지만 user2가 송지효
로 가입을
하는 바람에 결국 두 회원 모두 송지효
가 되었습니다.
만약 이런게 결제금액이라면 더욱 더 큰 문제가 발생합니다.
즉, 싱글톤은 절대 상태를 가져서는 안됩니다.
어차피 동시에 요청할 일이 없어!!라고 생각해도 사용하면 안됩니다.
개발은 혼자하는 것이 아니기 때문에 다른 개발자가 다른 곳에서 호출할 수 있는 것입니다.
class SingletonTTest {
@Test
void t() {
SingletonT user1 = SingletonT.getInstance();
SingletonT user2 = SingletonT.getInstance();
user1.setName("김종국");
user2.setName("송지효");
assertThat(user1.getName()).isEqualTo(user2.getName());
assertThat(user2.getName()).isEqualTo("송지효");
}
}
반응형
'기타 IT' 카테고리의 다른 글
구글 oauth2 리다이렉션 400오류 (0) | 2021.09.30 |
---|---|
Gmail Smtp 534-5.7.14와534-5.7.9에러 (0) | 2021.09.30 |
IoC, DI 컨테이너 (0) | 2021.09.26 |
라이브러리와 프레임워크 차이 (0) | 2021.09.26 |
객체지향 프로그래밍이 뭔가요? (0) | 2021.05.15 |