본문 바로가기
백엔드

싱글톤 패턴 SINGLETON

by cook_code 2023. 4. 27.

싱글톤 패턴

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

싱글톤 패턴 사용 예시

- 레지스트리 설정 파일 : 객체 여러 개 생성 시 설정 값 변경 위험 내재 

- BDCP(DatabaseConnection Pool): 공통된 객체를 여러 개 생성해서 사용해야 하는 경우 

- 데이터베이스에서 스레드풀, 캐시, 로그 기록 객체 등을 생성하는 경우 

싱글톤 패턴 장단점

  • 장점

- 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 

- 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. 

- 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용한다.

- 두 번째 이용시부터는 객체 로딩 시간이 줄어 성능이 좋아지는 장점이 있다. 

  • 단점

- 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우에 다른 클래스의 인스턴스 간에 결합도가 높아져 '개방 - 폐쇄'원칙을 위배하게 된다. 

- 이는 객체 지향 설계 원칙에 어긋나기 때문에 수정이 어려워지고 유지보수의 비용이 높아질 수 있다. 

따라서, 꼭 필요가 아니라면 싱글톤 패턴 사용은 지양해야 한다. 

* 개방-폐쇄 원칙 (OCP, Open-Closed Principle) : 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계해야한다. 

싱글톤 생성 방법

private static 클래스명 instance = new 클래스명();
private 클래스명 (){}
public static 클래스명 getInstance(){
  if(instance == null)
    instance = new 클래스명();
    return instance;
}
package config;

public class DBManager {

    private static DBManager instance = new DBManager();
    
    private DBManager() {
    	
    }

    public static DBManager getInstance() {
    	if(instance == null)
    		instance = new DBManager();
        return instance;
    }

}

 

멀티쓰레드 환경에서 싱글톤 패턴 (동시성 문제)

- 여러 개의 쓰레드가 동시에 getInstance()메소드에 접근할 때, 여러 개의 인스턴스가 만들어질 수도 있는 문제 

해결방법 >

1. synchronized 메소드 선언 

2. DCL(Double Checked Locking) 방식

3. DCL방식에 volatile 키워드 사용

4. static 초기화 

5. LazyHolder 방식

6. ENUM 방식

'일단 해결방법만 적어두고 필요할 때 검색해서 블로그에 업로드할 예정'

참고 블로그

 

[디자인 패턴] 싱글톤 패턴(Singleton Pattern) 정리 및 예제 - 생성 패턴

1. 싱글톤 패턴(Singleton pattern) 정리 싱글톤 패턴이란? 어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.

devmoony.tistory.com

 

 

[Design Pattern] 싱글톤 패턴(Singleton Pattern)에 대하여

싱글톤 패턴(Singleton Pattern)이란? 싱글톤 패턴은 객체를 딱 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴을 말합니다. 개발을 하다 보면 전역적으로

coding-factory.tistory.com

 

 

멀티스레드 환경에서 Thread Safe 하게 Singleton Pattern 사용하기

일반적으로 단일 스레드 환경에서 Singleton Pattern을 사용할 때는 큰 문제가 없습니다. 하지만 멀티스레드 환경에서는 다중 스레드를 이용한다는 부분에서 생길 수 있는 문제점들이 있으며, 이를

seunghyunson.tistory.com

반응형

'백엔드' 카테고리의 다른 글

[스파르타코딩클럽] 코드 없이 AI로 웹사이트 하나가 뚝딱  (0) 2023.04.29
TOMCAT 실행은 되는데 404 ERROR  (0) 2023.04.27
MVC 패턴  (0) 2023.04.26
연산자 OPERATOR  (0) 2023.04.25
전자정부프레임워크  (0) 2023.04.25