728x90
반응형
SMALL
싱글톤 패턴(Singleton Pattern)이란?
**싱글톤 패턴(Singleton Pattern)**은 하나의 클래스에서 단 하나의 객체만 생성되도록 보장하는 디자인 패턴입니다.
이 패턴은 애플리케이션 전역에서 공유되는 객체를 사용할 때 유용하며, 전역 상태를 관리하거나 공유 리소스를 다룰 때 주로 사용됩니다.
싱글톤 패턴이 필요한 이유
- 전역 상태 관리
- 하나의 인스턴스를 모든 코드에서 공유함으로써 데이터 일관성을 유지합니다.
- 예: 애플리케이션의 설정 정보 관리, 로그 기록 객체 등.
- 메모리 절약
- 동일한 객체를 여러 번 생성하는 대신 하나의 객체를 공유하여 메모리 사용량을 줄입니다.
- 객체 생성을 제어
- 불필요한 객체 생성을 방지하고, 오직 하나의 객체만 존재하도록 제어합니다.
싱글톤 패턴의 구현 방법
1. 기본 구현 단계
- 정적 변수 선언
- 클래스 내에 유일한 인스턴스를 저장할 정적 변수를 선언합니다.
- private 생성자 선언
- 외부에서 객체를 생성하지 못하도록 생성자를 private으로 선언합니다.
- 정적 메서드로 인스턴스 반환
- 유일한 인스턴스를 반환하는 정적 메서드를 제공합니다.
- 인스턴스가 없으면 생성하고, 이미 존재하면 기존 인스턴스를 반환합니다.
싱글톤 클래스 예제
package design_patten;
public class SingleTon {
// 1. 유일한 인스턴스를 저장할 변수를 선언 (private, static)
private static SingleTon instance;
// 2. 외부에서 객체를 생성하지 못하도록 private 생성자 선언
private SingleTon() {}
// 3. 정적 메서드로 유일한 인스턴스 반환
public static SingleTon getInstance() {
if (instance == null) { // 인스턴스가 없으면 생성
instance = new SingleTon();
}
return instance; // 이미 존재하면 기존 인스턴스 반환
}
}
싱글톤 패턴 사용 예제
Main 클래스
package design_patten;
public class MainTest {
public static void main(String[] args) {
// 싱글톤 객체 가져오기
SingleTon singleTon1 = SingleTon.getInstance();
SingleTon singleTon2 = SingleTon.getInstance();
// 두 객체가 같은지 확인
System.out.println(singleTon1); // 객체 주소 출력
System.out.println(singleTon2); // 동일한 객체 주소 출력
if (singleTon1 == singleTon2) {
System.out.println("같은 객체가 맞아요"); // 동일 객체임을 확인
}
}
}
출력 결과
design_patten.SingleTon@15db9742
design_patten.SingleTon@15db9742
같은 객체가 맞아요
싱글톤 패턴의 장점과 단점
장점
- 인스턴스의 유일성 보장
- 애플리케이션 전역에서 동일한 객체를 사용합니다.
- 메모리 절약
- 객체를 한 번만 생성하므로 메모리를 효율적으로 사용할 수 있습니다.
- 전역 상태 관리 용이
- 설정, 로그, 데이터베이스 연결 등 전역적으로 공유되는 리소스를 관리하기 적합합니다.
단점
- 테스트 어려움
- 싱글톤 패턴은 전역 상태를 사용하기 때문에 단위 테스트 시 의존성이 생길 수 있습니다.
- 멀티스레드 환경 문제
- 동기화 처리를 하지 않으면 멀티스레드 환경에서 두 개 이상의 인스턴스가 생성될 가능성이 있습니다.
멀티스레드 환경에서 싱글톤 패턴 개선
멀티스레드 환경에서는 synchronized 키워드를 사용하여 동기화하거나, 이른 초기화(Eager Initialization) 또는 이중 검증(Double-Checked Locking) 방식을 사용하여 문제를 해결할 수 있습니다.
동기화 방식
public static synchronized SingleTon getInstance() {
if (instance == null) {
instance = new SingleTon();
}
return instance;
}
이른 동기화 방식
public class SingleTon {
private static final SingleTon instance = new SingleTon();
private SingleTon() {}
public static SingleTon getInstance() {
return instance;
}
}
싱글톤 패턴은 객체의 유일성을 보장하고, 전역 상태를 효율적으로 관리하는 강력한 도구입니다.
특히, 애플리케이션의 설정 관리, 로그 처리, 데이터베이스 연결 관리 등 리소스 공유가 필요한 상황에서 매우 유용합니다.
멀티스레드 환경에서 적절한 개선 방법을 적용하면 더욱 안전하고 효율적인 구현이 가능합니다.
728x90
반응형
LIST
'JAVA' 카테고리의 다른 글
[JAVA] 코딩테스트 필수 문법 정리 (0) | 2025.02.02 |
---|---|
[JAVA] 전략 패턴(Strategy Pattern) (0) | 2025.01.16 |
[JAVA] 어댑터 패턴(Adapter Pattern) (1) | 2025.01.09 |
[JAVA] 콜백 메서드란? (0) | 2025.01.09 |
[JAVA] 디자인 패턴(Design Pattern) (0) | 2025.01.09 |