싱글톤 패턴은 간단하게 말하면 객체의 인스턴스를 한개만 생성되게 하는 패턴이다.
생성자를 여러 번 호출하더라도 인스턴스가 하나만 존재하도록 보장한다.
즉 아래와 같은 상황에서 사용한다.
- 프로그램 내에서 하나의 객체만 존재해야 한다.
- 프로그램 내에서 여러 부분에서 해당 객체를 공유하여 사용해해야 한다.
ㅇ 싱글톤 패턴의 장단점
장점
- 유일한 인스턴스
애플리케이션 전역에 단 하나의 인스턴스만 존재하도록 보장한다.
객체의 일관된 상태를 유지하고, 전역에서 접근 가능하여 공유 자원의 관리를 편하게 한다. - 메모리 절약
생성자를 여러 번 호출하여도 새로운 인스턴스를 생성하지 않아 메모리 점유 및 해제에 대한 비용을 줄인다. - 지연 초기화
필요할 때만 객체를 생성하여 초기화 비용을 줄일 수 있다.
애플리케이션 시작 시 불필요한 자원 소모를 방지할 수 있다.
단점
- 결합도 증가
전역에서 접근이 가능하기 때문에 해당 인스턴스에 의존하는 경우 결합도가 증가한다. - 테스트 복잡성
싱글톤 클래스를 의존하는 클래스들의 결합도 증가로 테스트가 어려울 수 있다. - 상태 관리의 어려움
만약 싱글톤 클래스가 상태를 가지고 있는 경우, 전역에서 사용되어 변경될 수 있다.
이로 인해 예상치 못한 동작이 발생할 수 있다. - 전역에서 접근 가능
전역에서 접근하기 때문에 무분별한 사용을 막기 힘들다 이로 인해 변경에 대한 복잡성이 증가할 수 있다.
ㅇ 싱글톤 패턴의 구현
싱글톤 패턴의 구현 조건
- new 키워드를 사용할 수 없도록 생성자에 private 접근 제어자를 지정한다.
- 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
- 유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
구현코드
사용
출력
위 코드의 경우 멀티 스레드 환경에서 Thread Safe하지 않는 문제점이 있다.
쓰레드가 A와 B가 있다고 가정할 때
A가 getInstance의 if문을 통과하고 객체를 생성하기 직전에
B가 if문을 통과해버리면 2번의 초기화가 일어날 수 있다.
Thread Safe를 보장하기 위한 방법
- sychronized 키워드 사용
하나의 스레드만 접근 가능하도록 한다.
여러 스레드가 접근하려할 때 Lock으로 인한 성능 저하가 발생할 수 있다. - Bill Pugh Solution 사용
내부 클래스를 활용하여 구현하는 방법 - Enum 클래스 사용
상속이 불가능한 문제점이 있다.
'CS' 카테고리의 다른 글
[Design Pattern]팩토리 메서드 패턴 (0) | 2024.11.26 |
---|---|
[Design Pattern] 템플릿 메서드 패턴 (0) | 2024.11.26 |
CS 알고리즘 시간복잡도 (0) | 2024.10.07 |
CS 오토 스케일링(Auto Scaling)이란 (0) | 2024.09.19 |
CS Cloud VS On-Premise (3) | 2024.09.10 |