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개 생성될 수 있다.
'BackEnd > Java' 카테고리의 다른 글
[Java]@Transactionaleventlistener 다루기 (0) | 2023.09.15 |
---|---|
[Java] Default Methods(디폴트 메소드) (0) | 2022.10.20 |
[Java] 메소드 레퍼런스란? (0) | 2022.10.09 |
[Java] 함수형 인터페이스란? (0) | 2022.10.02 |
[JAVA] LinkedList의 개념 및 사용법 (1) | 2022.09.07 |
댓글