Signleton Pattern (싱글톤 패턴)
생성자가 여러 번 호출되더라도 실제 생성되는 객체는 하나가 되는 방식이다.
최초에 한번 생성된 이후 다시 생성자를 호출하더라도 기존에 생성되어있던 객체를 반환한다.
주로 DB에 접근하는 DAO와 같은 클래스나 Sevlet, Biz 등에 대해 singleton pattern을 적용한다.
특징
- 클래스에서 만들 수 있는 인스턴스의 수를 하나로 제한한다.
- 때문에 프로그램 실행 중에 객체가 최대 한 개만 있을 수 있다.
- 해당 객체에 전역적으로 접근이 가능해지고 다른 클래스 간에 데이터 공유가 용이하다.
- 동일 클래스에 대해 여러개의 인스턴스를 생성하지 않기 때문에 메모리 낭비를 방지할 수 있다.
방법
아래 코드에서 기존에 생성된 instance가 없을 경우에만 생성하므로
클래스에 대한 인스턴스의 수가 하나로 제한된다.
이 때 생성자는 외부에서 호출하지 못하도록 private으로 설정해야 한다.
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// ...
}
주의
멀티 스레드 환경에서 하나의 객체 생성이 보장되지 않을 수 있기 때문에
lock 등을 통해 이를 보완/보장해줘야 한다.
Static vs SingletonPattern
Static
- 장점
- 클래스의 객체를 생성하지 않더라도 클래스 내부 함수, 변수 등에 접근할 수 있다.
- 단순 공통 함수나 변수에 쉽게 접근할 수 있게 한다.
- 단점
- 다형성을 사용할 수 없다.
- Static 메소드에서 non-static 변수들은 접근할 수 없게 된다.
- 사용
- 주로 객체로 사용하지 않기 때문에 생성자를 private로 하거나 abstract 클래스로 선언한다.
- Java에서 <pre>Math</pre>가 static 메소드들의 집합 클래스로 사용된다.
Signleton Pattern
- 장점
- 다형성을 적용할 수 있다.
- 생성 시점을 제어할 수 있다.
- non-static 변수들을 사용할 수 있다.
- 단점
- 객체를 생성해야 접근이 가능하다.
- 사용
- 주로 database에 접근하는 DAO와 같은 클래스에 적용한다.
참고
https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/
'Coding > [Web] Backend' 카테고리의 다른 글
[SpringBoot] @Builder의 장점 (3) | 2024.01.14 |
---|---|
Entity, DTO, DAO, VO (0) | 2023.04.03 |
MVC 패턴 (feat. Servlet/JSP) (0) | 2023.04.03 |
PRG 패턴 : Post → Redirect → Get (0) | 2023.04.03 |
Cookie, Session (0) | 2023.03.31 |
댓글