본문 바로가기

Language/JAVA

[JAVA] 싱글톤 패턴 (Singleton pattern)

1. 싱글톤 패턴 (Singleton pattern)

- 객체의 인스턴스가 오직 1개만 생성되는 패턴

- 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 반환시키도록 만드는 것 [2]

 

  1-1. 싱글톤 패턴의 구현(JAVA) [3]

public class 클래스명{
    //private 접근 권한을 갖는 정적 필드 선언과 초기화
    //private 접근 제한자를 붙여 외부에서 정적 필드값을 변경하지 못하도록 함
    private static 클래스명 INSTANCE = new 클래스명();
    
    //private 접근 권한을 갖는 생성자 선언
    private 클래스명(){}
    
    //public 접근 권한을 갖는 정적 메소드 선언
    public static 클래스명 getInstance(){
    	return INSTANCE;
    }
}

//변수1과 변수2가 참조하는 객체는 동일한 객체가 된다
클래스명 변수1 = 클래스명.getInstance();
클래스명 변수2 = 클래스명.getInstance();

 

  1-2. 싱글톤 패턴의 사용 이유 

  - 메모리 낭비 방지 가능

  : 최초 한 번의 new 연산자를 통해 고정된 메모리 영역을 사용하므로 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다. [1]

 

  - 다른 클래스 간 쉬운 데이터 공유

  : 싱글톤 인스턴스는 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용 가능하다. [1]

 

  1-3. 싱글톤 패턴이 사용되는 경우

  - 공통된 객체를 여러 개 생성해서 사용해야 하는 상황 [2]

  : DB Connection Pool, 스레드풀, 캐시, 로그 기록 객체 등

 

  1-4. 싱글톤 패턴의 문제점 

  - 테스트의 어려움

  : 싱글톤 인스턴스는 자원을 공유하고 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행되려면 매번 인스턴스의 상태를 초기화시켜주어야 한다. [2]

 

  - 높은 결합도

  : 싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지는데, 이때 객체 지향 설계 원칙(SOLID) 중 개방-폐쇄 원칙(OCP)이 위배된다. [2]

 

  - 싱글톤 패턴을 구현하는 코드 자체가 많이 필요

  - 자식 클래스 생성 불가

  - 내부 상태 변경의 어려움

 

 

 

 

참고자료

[1] 싱글톤(Singleton) 패턴이란? https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

[2] 싱글톤 패턴(Singleton pattern) https://gyoogle.dev/blog/design-pattern/Singleton%20Pattern.html

[3] [자바 기초 강의] 72강. 6.15 싱글톤 패턴 https://www.youtube.com/watch?v=sc7R9jl8DiY 

 

 

'Language > JAVA' 카테고리의 다른 글

[Java] Enum  (0) 2024.01.29
[JAVA] 옵저버 패턴 (Observer pattern)  (0) 2022.12.04