디자인 패턴 - Singleton

leehyunjon·2022년 11월 16일
0

Java

목록 보기
2/7

싱글톤 패턴이란

싱글톤 패턴은 객체의 인스턴스가 단 하나만 생성되고 해당 인스턴스를 공통으로 사용하는 것입니다.

public class SingleObj{
	private static SingleObj instance;
    
    private SingleObj()
    
    public static SingleObj getInstance(){
    	if(singleObj == null){
        	singleObj = new SingleObj();
        }
        return singleObj;
    }
}

싱글톤의 장점

  • 최초 한번의 인스턴스 생성으로 고정된 메모리 영역을 공유하기 때문에 메모리 낭비를 방지할 수 있습니다.
  • 싱글톤 인스턴스는 전역적으로 사용되기 때문에 해당 인스턴스 데이터를 공유하기가 쉽습니다.

싱글톤의 단점

  • 생성자가 private이기때문에 자기 자신만이 인스턴스를 생성할 수 있습니다.
    • Mock객체를 이용한 테스트가 어렵습니다.
    • 상속이 불가능합니다.
  • 동시성 문제가 발생할 수 있습니다.
  • 내부적으로 직접 new를 통해 인스턴스를 생성하고 인스턴스를 직접 참조하여 사용하기 때문에 DIP를 위반합니다.
    • 싱글톤 패턴의 의도는 해당 인스턴스를 직접 참조해서 사용하도록 getInstance()를 public static으로 전역적으로 사용하기 위함입니다. (참조)

스프링 싱글톤

언어 레벨 싱글톤에서는 생성자가 private이라 상속 이불가능하고 테스트가 어렵다는 등의 단점이 있습니다.
그렇기 때문에 안티패턴으로 불리면서 객체지향에 위반되는 사례가 많습니다.

하지만, 스프링 컨테이너의 프레임워크 도움을 받게 된다면, 이러한 문제를 해결해 줄 수 있습니다.

public class SingletonObj{
    
}

스프링 컨테이너에서는 Reflection API를 이용해서 인스턴스를 자동으로 생성해주기 때문에 언어 레벨에서 필요한 private 생성자 등이 필요없게됩니다.


Reference

https://www.youtube.com/watch?v=lJES5TQTTWE

https://www.inflearn.com/questions/123791

https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

profile
내 꿈은 좋은 개발자

0개의 댓글