728x90
디자인 패턴 공부용으로 블로그에 기록을 해본다.
공부에 참고한 자료로는 "Java 언어로 배우는 디자인 패턴 입문" 을 참고 하였다.
정의
프로그램을 실행할 때 보통 많은 인스턴스가 생성된다. 그러나 '클래스의 인스턴스가 단 하나만 필요' 한 경우도 있다. 그것은 시스템 안에서 1개 밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때이다. 이 처럼 단 하나의 인스턴스만 생성되도록 하는 것이 Singleton 패턴이다.
클래스 설명
이름 | 해설 |
Singleton | 단 하나의 인스턴스만 생성되는 클래스 |
Main | 동작 테스트용 클래스 |
Singleton 클래스
package Singleton;
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("인스턴스를 생성하였습니다.");
}
public static Singleton getInstance() {
return singleton;
}
}
Main 클래스
package Singleton;
public class Main {
public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if (obj1 == obj2) {
System.out.println("같은 인스턴스입니다.");
} else {
System.out.println("다른 인스턴스입니다.");
}
}
}
Main 클래스 실행 결과
인스턴스를 생성하였습니다.
같은 인스턴스입니다.
Process finished with exit code 0
위와 같이 Singleton.getInstance 메소드를 통해 인스턴스를 따로 생성하지 않고 미리 생성 된 인스턴스를 가져다 쓰고 있다.
추가로 알게 된 지식
예전에 신입때는 보통 아래와 같이 Singleton 패턴을 구현하였었다.
package Singleton;
public class Singleton {
private static Singleton singleton = null;
private Singleton() {
System.out.println("인스턴스를 생성하였습니다.");
}
public static Singleton getInstance() {
if (singleton == null) singleton = new Singleton();
return singleton;
}
}
이렇게 생성을 하면 안된다.
이유는 보통 어플리케이션 개발을 할 때 Thread를 사용하는 경우가 많은데 Multi Thread 환경에서는 위와 같이 하게 될 경우 거의 동시에 getInstance 메소드가 호출이 되었을 때 단일 인스턴스가 아닌 다수의 인스턴스가 생성 될 가능성이 있기 때문이다.
이런 경우에는 synchronized를 사용하여 엄격하게 Singleton 패턴이 되도록 만들어 준다.
'디자인패턴' 카테고리의 다른 글
[Java] Builder 패턴 (0) | 2022.04.25 |
---|---|
[Java] Prototype 패턴 (0) | 2022.04.12 |
[Java] Factory 패턴 (0) | 2022.04.05 |
[Java] Template Method 패턴 (0) | 2022.04.03 |
[Java] Adapter 패턴 (0) | 2022.04.03 |