public class SingletonService {
// static 영역에 객체를 딱 1개만 생성해둔다.
private static final SingletonService instance = new SingletonService();
// public으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다.
public static SingletonService getInstance() {
return instance;
}
// 생성자를 private으로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다.
private SingletonService() { }
public void logic() {
System.out.println("싱글톤 객체 로직 호출");
}
}
싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다?
즉, 여러 클라이언트가 접근할 수 있는 공유 값을 설정하면 동기화 문제가 발생!!!!!
스트링 빈을 항상 무상태(stateless)로 설계해야 한다!!
자바 코드를 어떻게 할수 없기 때문에 스프링에서는 싱글톤을 유지를 보장하기위해 바이트 코드를 조작한다.