싱글톤 패턴 (Singleton Pattern)

구교석·2024년 3월 12일
post-thumbnail

팩토리 메서드 패턴 (Factory Method Pattern)은 생성 패턴 중 하나이다
생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴입니다.
생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다.

싱글톤 패턴이란?

싱글톤 패턴이란 단 하나의 유일한 객체를 만들기 위한 코드 패턴이다.
쉽게 말하자면 메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법을 말한다.
흔히 우리가 사용하는 전역변수(static)와 역할이 비슷하다고 할 수 있다.
대표적으로 데이터베이스 연결 모듈을 예로 들 수 있는데, 데이터베이스에 접속하는 작업(I/O 바운드)은 그 자체로 무거운 작업에 속하며 또한 한번만 객체를 생성하고 돌려쓰면 되지 굳이 여러번 생성할 필요가 없기 때문이다.
이밖에도 디스크 연결, 네트워크 통신, DBCP 커넥션풀, 스레드풀, 캐시, 로그 기록 객체 등에 이용된다.

싱글톤 구조

싱글톤 패턴 생성 방법

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
    }
    
    public static Singleton getInstance() {
        return instance;
    }

    public void singleton() {
        System.out.println("Singleton");
    }
}

우선 static영역에 instance 객체를 생성하고 이후 instance가 필요할 때 public static으로 선언된 getInstance() 메서드를 통해 최초에 만들어진 instance를 getInstance() 메서드가 호출될 때마다 항상 사용하도록 한다.
여기서 기본 생성자를 private로 선언하여 외부에서 new 키워드로 새로운 객체 생성을 못하게 막는게 중요하다.

싱글톤 패턴 문제점

싱글톤 패턴은 간단하지만 여러 문제가 존재한다.

1. 의존성이 높아진다.

싱글톤 패턴을 사용하는 경우 클래스의 객체를 미리 생성한 뒤에 필요한 경우 정적 메서드를 이용하기 대문에 클래스 사이에 의존성이 높아지게 된다는 문제점이 있다. (= 높은 결합)

싱글톤의 인스턴스가 변경 되면 해당 인스턴스를 참조하는 모든 클래스들을 수정해야 하는 문제가 발생한다.

2. private 생성자 때문에 상속이 어렵다.

싱글톤 패턴은 기본 생성자를 private로 만들었기 때문에 상속을 통한 자식 클래스를 만들 수 없다는 문제점이 있다. 즉, 자바의 객체지향 언어의 장점 중 하나인 다형성을 적용하지 못한다는 문제로 이어진다.

3. 테스트하기가 힘들다.

싱글톤 패턴의 인스턴스는 자원을 공유하고 있다는 특징이 있다. 이는 서로 독립적이어야 하는 단위 테스트를 하는데 문제가 된다.

독립적인 테스트가 진행이 되려면 전역에서 상태를 공유하고 있는 인스턴스의 상태를 매번 초기화해야 한다. 초기화해주지 않으면 전역에서 상태를 공유 중이기 때문에 테스트가 정상적으로 수행되지 못할 가능성이 존재한다.

참고 사이트


싱글턴 패턴
싱글톤 패턴의 사용 이유와 문제점

profile
끊임없이 노력하는 개발자

0개의 댓글