싱글톤 패턴(Singleton)이란 ?

Black·2021년 11월 23일
0

Java에서의 싱글톤 패턴

Singleton 패턴은 자바에서 많이 사용한다.
싱글톤 패턴이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다.
즉, 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환 해주는 것이다.

public class SingleTon {
    //Instance
    private static SingleTon singleTon = new SingleTon();

    //private construct
    private SingleTon() {}

    public static SingleTon getSingleTon() {
        return singleTon;
    }
}

위 코드에서는 singleTon이라는 전역 변수를 선언하는데,
static을 줌으로써 인스턴스화 하지 않고 사용할 수 있게 했다.
하지만 접근 제한자가 private로 되어 있어, 직접 접근은 불가능하다.
또한 생성자도 private으로 되어 있어 new를 통한 객체 생성도 불가능하다.
결국 getSingleTon 메서드를 통해서 해당 인스턴스를 얻을 수 있게 된다.

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

위에서도 언급된 바와 같이 한번의 객체 생성으로 재사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.
또한 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이하다.

싱글톤 패턴의 문제점

싱글톤도 위에서 언급된 것 처럼 전역성을 띄면서 다른 객체와 공통으로 사용하는 경우와 같은 몇 가지 케이스에서만 사용할 때 효율적이며 그 외에는 문제점이 생길 수 있다.
일단 싱글톤으로 만든 객체의 역할이 간단한 것이 아닌 역할이 복잡한 경우라면 해당 싱글톤 객체를 사용하는 다른 객체간의 결함도가 높아져서 객체 지향 설계 원칙에 어긋나게 된다. (open-closed)
또한 해당 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서 사이드 이팩트 발생 확률이 생기게 되며, 멀티 쓰래드 환경에서 동기화 처리 문제 등이 생기게 된다.

싱글톤 패턴 구현

Java와 Spring의 차이점

자바와 Spring에서의 싱글톤 차이점이라면, 싱글톤 객체의 생명주기가 다르다.
또한 자바에서 공유 범위는 Class loader 기준이지만, Spring에서는 ApplicationContext가 기준이 된다.

참고 : https://elfinlas.github.io/2019/09/23/java-singleton/

profile
Back-end Developer

0개의 댓글