Skip to main content

싱글톤 패턴

싱글톤 패턴

싱글톤 패턴

싱글톤 패턴이란 소프트웨어 디자인 패턴의 생성 패턴 중 하나이다. 싱글톤 패턴을 사용하게 되면 '생성자가 여러번 호출되더라도 객체는 최초 한번만 생성되고 그 이후에는 최초의 생성자가 생성한 객체를 리턴'하게 된다. 주로 DBCP(DataBase Connection Pool)와 같이 공통된 객체를 여러개 생성해서 사용하는 상황에 많이 사용이 된다.

안드로이드 앱 같은 경우 각 액티비티나 클래스 별로 주요 클래스들을 일일이 전달하기가 번거로워서 싱글톤 클래스를 사용하는 것이 편하다.

싱글톤 패턴 구현

자바로 구현한 싱글톤 패턴 예시입니다.

public class SingletonObj {
private static SingletonObj singletonObj = null;

private SingletonObj(){ }

public static SingletonObj getInstance(){
if( singletonObj == null ){
singletonObj = new SingletonObj();
}

return singletonObj;
}
}

외부에서 직접 생성하지 못하도록 생성자를 private로 선언해야 합니다. 객체가 할당되어 있으면 그것을 반환하고, 할당되어 있지 않으면 새로운 객체를 할당하는 getInstance라는 메소드를 만듭니다.

public static void main(String args[]){
for( int i = 0; i < 5; i++ ){
SingleObj obj = SingleObj.getInstance();
System.out.println(obj.toString());
}
}

하나의 객체만 호출하는지 확인해본다.

싱글톤 패턴 구현(JAVA)

아래와 같이 하나의 객체만 호출이 되는 것을 확인할 수 있다.

싱글톤 패턴의 장단점

장점

  1. 메모리 낭비를 방지할 수 있다.
  2. 싱글톤 객체를 사용 안하는 경우 인스턴스를 생성하지 않는다.
  3. 인스턴스가 한개만 존재하기에 개발할 때 실수를 줄일 수 있다.
  4. 두번째 이용시부터는 객체 로딩시간이 현저하게 줄어들어 성능이 좋아진다.

단점

  1. 전역변수보다 사용하기 불편하다.

  2. 싱글톤의 역할이 커질수록 결합도가 높아져 객체 지향 설계 원칙에 어긋날 수 있다.

  3. 멀티쓰레드 환경에서 컨트롤이 어렵다.

    tip

    인스턴스를 만드는 메서드에 동기화하는 방법과 정적 변수에 인스턴스를 만들어 바로 초기화하는 방법을 통하여 멀티쓰레드 환경에서 싱글톤 문제를 해결 할 수 있다.

나올 수 있는 면접 질문

언제 싱글톤 패턴을 사용하면 좋을까?

  • 안드로이드 앱을 제작할 때 각 액티비티나 클래스 별로 주요 클래스들을 일일이 전달하기가 번거로울때

싱글톤 패턴을 사용하는 이유는 무엇인가?

  • 한번도 사용하지 않으면 인스턴스를 생성하지 않는다.
  • 두번째 이용시부터는 객체 로딩시간이 현저하게 줄어들어 성능이 좋아진다.

참고 url

싱글톤 패턴 - 위키백과

싱글톤 패턴 문제점 - 정아마추어

싱글톤 패턴 장단점 - 코딩팩토리

싱글톤 패턴 예시 - victolee

기여자


HelloNaks

📦