Java SingleTon pattern(자바 싱글톤 패턴) 구현 및 설명
먼저 싱글톤 패턴( SingleTon pattern )의 특징은
싱글톤 패턴은 특정 클래스가 단 한번 인스턴스를 생성하여 사용하는 패턴 입니다.
생성자를 여러번 호출 하더라도 하나의 인스턴스만 존재 해야 합니다.
사용한 해당 Application에서는 동일한 인스턴스를 통하여 처리되게 됩니다.
사용하는 이유
해당 서비스에서 인스턴스가 불필요하게 많이 사용되게 된다면, 많은 리소스 소모로 인해
시스템이 느려지거나, 여러 예외 상황이 발생할 수 있습니다.
대표적인 사용 방식의 예시로 커넥션 풀(Connection pool)이 있습니다.
장점을 알아보면
유일한 인스턴스로 시스템의 자원 소모 관련으로 사용 자원을 절약하고, 생성 시간에 대한 비용을
줄일 수 있고, 인스턴스가 같기 때문에 데이터나 처리에 대한 내용을 동기화 하기 편합니다.
하지만 단점으로는
전역 지역에 사용되기 때문에 인스턴스의 의존도가 높고, 해당 인스턴스의 상태 관리가 어렵습니다.
또 한 특수한 경우(ex 멀티 쓰레드 환경) 처리 해야할 내용이 많거나, 여러 서비스에서 처리 되어야 한다면, 처리 중, 접근 하지 못하도록 대기 처리를 해야 하는데, 그 만큼 사용 빈도가 밀집되면 처리 시간이 오래 걸린다는 단점이 있습니다.
즉 상황에 따라 올바르게 장단점을 고려하여 적절하게 사용해야 합니다.
예시 코드는 다음과 같습니다.
public class SingleTon {
private static SingleTon instance;
private SingleTon(){
}
public static SingleTon getInstance(){
if(instance == null){
synchronized (SingleTon.class){
instance = new SingleTon();
}
}
return instance;
}
}
생성자의 경우 private 입니다.
다른 곳에서 인스턴스화를 하면 안 되기 때문에 인스턴스화를 할 수 없게 구현해야 합니다.
SingleTon singleTon = new SingleTon(); (x)
그 다음 synchronized는 사용중인 thread를 제외하고, 다른 thread의 접근을 막습니다.
실제 메소드가 호출된 시점에서 객체에 대한 lock을 얻습니다. 그 후 메소드가 종료되면 lock를 반환 합니다.
synchronized (SingleTon.class){
instance = new SingleTon();
}