싱글톤 패턴이란?
- 클래스의 인스턴스가 단 1개만 생성되는 것을 보장하는 것
- 인스턴스가 2개 이상이 되지 않도록 막아야하므로 생성자의 접근제어자를 private 로 지정하여 new 로 생성하지 못하게 해야한다.
그럼 싱글톤 패턴을 대체 왜 쓰는 걸까?
예를 들어, UserService 라는 클래스가 있다고 하고, 고객이 접근을 할 때 필수적으로 사용된다고 해보자. 1분에 100명의 고객이 접근한다면, 분당 100개의 UserService 객체가 생성되고 사라져 엄청난 자원 낭비가 일어난다.
이런 문제를 해결하기 위해 모든 고객들이 하나의 객체를 공유하면 좋겠다는 아이디어에서 나온 것!
기본적인 싱글톤 패턴의 구현 방식
class Singleton {
// static 으로 딱 1개만
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- static 영역에 딱 1개만 미리 생성하여 둔다.
- 생성자는 private 로 지정해서 외부에서 인스턴스를 생성하는 것을 막는다.
- 필요하다면 getInstance() 메서드를 이용해서 얻게 한다. 항상 같은 인스턴스를 반환한다.
잘못 구현된 싱글턴 패턴의 문제점
- 객체 지향적이지 않다.
→ 싱글톤은 전역 상태를 만들기 때문에 아무나 접근하고 공유할 수 있다. 또, 생성자가 private이기에 상속도 불가능하다.
- 테스트하기 어렵다.
→ https://zereight.tistory.com/1222
싱글턴 패턴에서 주의할 점
여러 클라이언트가 같은 인스턴스를 공유하기에 무상태로 설계해야한다.
→ 즉, 특정 유저가 값을 변경할 수 있는 필드가 존재하면 안된다.
→ 필드 대신에 지역변수, 파라미터를 이용하자.
'이론 > 디자인패턴' 카테고리의 다른 글
추상 팩토리 패턴 (0) | 2022.12.06 |
---|---|
팩토리메서드 패턴 (0) | 2022.12.04 |
어뎁터 패턴 (0) | 2022.12.02 |
데코레이터 패턴 (0) | 2022.11.26 |
프록시 패턴 (0) | 2022.11.25 |