티스토리 뷰

CS/공통

싱글톤(Singleton) 패턴

bool-flower 2022. 2. 20. 21:02

싱글톤 패턴이란?


객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 즉, 하나의 클래스에 오직 하나의 인스턴스만 가진다.

public class Singleton {

    private static Singleton INSTANCE = new Singleton();

    private Singleton() {
        // 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public void say() {
        System.out.println("hi, there");
    }
}

생성자를 private으로 선언하고 static 변수에 객체를 담아 그 객체만을 반환하는 메서드를 구현한다.

싱글톤 패턴을 사용하는 이유


메모리 낭비 방지

  • 최초 한 번의 new 연산자를 통해 고정된 메모리 영역 사용
  • 이미 생성된 인스턴스를 활용하여 속도도 빠름.

다른 클래스 간에 쉬운 데이터 공유

  • 전역으로 사용되기 때문에 다른 클래스의 인스턴스들이 접근 가능.
  • 하지만, 여러 클래스에서 동시에 접근하면 동시성 문제가 발생할 수 있음.

도메인 관점에서 인스턴스가 한 개만 존재하는 것을 보증하고 싶은 경우

싱글톤 패턴의 문제점


멀티스레드 환경

  • 멀티스레드 환경에서 동기화 처리를 안 하면 인스턴스가 두 개가 생성된다든지 하는 경우가 발생할 수 있음
  • 따라서 멀티스레드 환경에서 안전하게 싱글 톤 객체를 만드는 방법에 대해 고민해 봐야 함.

의존 관계상 클라이언트가 구체 클래스에 의존하게 됨

  • 클래스 안에서 객체를 생성하고 있으므로 SOLID 원칙 중 DIP(의존 역전 원칙)를 위반함
  • 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유할 경우 다른 클래스의 인스턴스들 간에 결합도가 높아짐.

테스트 코드 작성의 어려움

  • 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행 가능해야 함
  • 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 독립적인 인스턴스를 만들기 어려움
  • 격리된 환경에서 테스트가 수행되려면 매번 인스턴스의 상태를 초기화해야 함.

정리 및 느낀 점


한 개의 인스턴스 생성을 보증함으로써 효율을 찾을 수 있지만, 객체 지향에 위반하는 사례가 많다고 한다. 스프링 같은 싱글톤 객체 컨테이너를 통해 이를 보완해 나갈 수 있다.

지금까지 개발 공부를 해오면서 싱글톤 패턴을 아주 많이 사용해왔다. 주로 스프링 프레임워크를 통해 개발을 해왔으니 프로젝트를 한다면 항상 싱글톤 패턴을 사용했다고 봐도 될 것 같다. 막상 다시 정리를 해보니 이제껏 잘 모르고 사용해 왔다는 생각이 든다.

참조


 

싱글톤(Singleton) 패턴이란?

이번 글에서는 디자인 패턴의 종류 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴이 무엇인지, 패턴 구현 시 주의할 점은 무엇인지에 대해 알아보는 것만으로도 많은 도움이 될 것이라

tecoble.techcourse.co.kr

 

싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점

싱글톤 패턴(Singleton Pattern) 싱글톤 패턴 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 생성자가 여러

jeong-pro.tistory.com

 

 

'CS > 공통' 카테고리의 다른 글

VO vs DTO vs Entity  (0) 2022.08.01
Web Server와 WAS(Web Application Server)  (0) 2022.03.18
객체지향설계의 5대 원칙  (0) 2022.02.22
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday