BackEnd/Java

[Java] 싱글톤(Singleton)이란?

꾹꾹이 2022. 10. 10.
728x90

싱글톤 패턴이란?

 

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

 

생성자가 여러번 호출되어도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최로에 생성한 객체를 리턴한다.

 

아래는 예시이다.

1
2
3
4
5
6
7
8
9
10
11
public class SingleTonEX{
    private static SingleTonEx instance;  //singleTonEx클래스를 static으로 선언하여 다른곳에서 사용할 수 있게 함
    private SingleTonEx(){}  //생성자를 외부에서 호출 못하게 private으로 생성
 
    public static SingleTonEx getInstance(){
        if(instance==null){
            SingleTon = new SingleTonEx();  
        }
        return instance;
    }
}
cs

 

 

아래는 더 직관적인 예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class CarClass {
    
    private static ClarClass car = new CarClass();    //자기 자신을 멤버로 선언해서 메모이레 올림(static)
 
    private CarClass() {}
 
    //외부에서 멤버로 선언된 car를 가져올 수 있는 메소드를 생성
    public static CarClass getInstance() {
        return car;
    }
 
    private static boolean isUse = false;
 
    //차 사용 시작
    public static void drive() {
        isUse = true;
        System.out.println("start driving");
    }
 
    //차 사용 종료
    public static void parking() {
        isUse = false;
        System.out.println("parking");
    }
 
    public static boolean isEnableUseCar() {
        return !isUse;
    }
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
CarClass car = CarClass.getInstance();
 
//사용
if (car.isEnableUseCar()) {
    car.drive();
}
 
//사용요청
if (car.isEnableUseCar()) {
    car.drive();
else {
    System.out.println("WAIT!")
}
cs

 

싱글톤 패턴의 장점

  • 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.
  • 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
  • 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용한다.
  • 두 번째 이용시 부터는 객체 로딩 시간이 줄어 성능이 좋아지는 장점이 있다.

 

싱글톤 패턴의 단점

  • 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.
  • 이는 수정을 어렵게 만들고 객체 지향 설계 원칙에 어긋나며 유지보수 비용이 높아진다.
  • 멀티쓰레드 환경에서 동기화 처리를 안하면 인스턴스가 2개 생성될 수 있다.

댓글