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 |