티스토리 뷰

싱글톤 패턴(Singleton Pattern)

싱글톤 패턴이란?


소프트웨어 디자인 패턴에서 싱글톤 패턴(Singleton Pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글톤 패턴이라고 한다.

Singleton 패턴의 용도는 프로그램 내에서 단 하나의 인스턴스만을 생성해야 하는 상황, 즉 예를 들자면 환경설정을 관리하는 클래스 혹은 Connection Pool, Thread Pool과 같이 관리되어야 하는 상황에서 적용되는 디자인 패턴을 의미한다.

싱글톤 구현


일반적인 Singleton 패턴의 형태는 다음과 같다.



여기서 중점적으로 보아야 할 것은 생성자가 private 으로 선언이 되어 있다는 것이다. 위에서 언급한것 처럼 Singleton 패턴은 생성되는 객체는 단 하나이어야 하기 때문에 외부에서 이 클래스를 호출 할 때 여러차례의 인스턴스가 생성되어서는 안되기 때문이다.

간단한 Singleton 패턴을 구현한 소스를 보도록 하자.

class Singleton {
private static Singleton instance;
private Singleton() {}
private static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

코드를 보면 한결 이해가 쉬워진다.

Singleton 클래스의 인스턴스와 생성자를 외부에서 접근 할 수 없도록 private로 선언해 놓고 외부에서 사용하고 싶을 경우에는 getInstance 메소드를 호출해서 사용하도록 강제하고 있다.

위와 같은 형태로 구현을 한다면 getInstance 메소드가 최초 호출 될 때 인스턴스를 생성하게 되는데 인스턴스를 최초 로딩 시에 생성이 되도록 코드를 약간 수정해보자.

Class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
private static Singleton getInstance() {
return instance;
}
}

위의 코드와 다르게 static 인스턴스를 최초 선언할 때 함께 생성을 해주고 getInstance 메소드에서는 인스턴스를 리턴만 해주면 되도록 구현하였다.

위 코드는 Thread-safe하게 잘 만들어지고 동시에 프로그램의 전체 라이프 사이클 중 단 한번만 객체를 생성하고 다시 생성하지 않는 코드임을 알 수 있다.

Summary


싱글톤 패턴은 분명 많은 곳에서 활용될 수 있다.
하지만 너무 남발할 경우 데이터가 꼬이는 문제가 발생할 확률이 일반적인 구현 방식보다 높기 때문에 적절한 곳에서 활용하는 습관이 필요하다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday