본문 바로가기

내일배움캠프/Today I Learned

[TIL] 나의 마흔 두번째 회고록

1일 1개념


싱글톤 패턴(Singleton Pattern) 이란? 

 

말로만 들어봤던 Singleton Pattern은 무엇을 말하는 것까 궁금했었다. 

 

궁금한 건 못참으니까 바로 검색해보았다. 

 

싱글톤 패턴이란?

-> 어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 

그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴

 

인스턴스가 1개만 생성되는 특징을 가진 싱글톤 패턴을 이용하면

하나의 인스턴스를 메모리에 등록해서 여러 쓰레드가 동시에 

해당 인스턴스를 공유하며 사용할 수 있게끔 할 수 잇기 때문에 요청이 많은 곳에서 사용하면 효율을 높일 수 있다. 

 

But!!

싱글톤을 만들 때 동시성(Concurrency) 문제를 고려해서 설계해야 한다는 점이 있다.

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

 

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

 

싱글톤 패턴은 꼭 필요한 경우가 아니라면 지양해야 한다.


※ 싱글톤 패턴 사용 예시(싱글톤 클래스 생성)
public class CompanyInfo 
{
    private static CompanyInfo innstance;
 
    private String companyName;
    private String companyAddr;
    
    
    private CompanyInfo()
    {
    }
    
    public static CompanyInfo getInstance()
    {
        if (innstance == null)
        {
            synchronized(CompanyInfo.class)
            {
                innstance = new CompanyInfo();
            }
        }
        
        return innstance;
    }
    
    
    // getter, setter 
    public String getCompanyName() {
        return companyName;
    }
 
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
 
    public String getCompanyAddr() {
        return companyAddr;
    }
 
    public void setCompanyAddr(String companyAddr) {
        this.companyAddr = companyAddr;
    }    
}

 

※ getInstance 호출

외부에서 호출 시 new를 사용하지 않고 getInstance를 사용하여 객체를 생성하거나 반환 받는다.

CompanyInfo companyInfo = CompanyInfo.getInstance();

 

 

@출처 : https://devmoony.tistory.com/43

 

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

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

devmoony.tistory.com

@출처 : https://itstudy402.tistory.com/8