싱글톤 패턴(Singleton Pattern)

shinhyocheol·2021년 7월 15일
0

싱글톤 패턴

어플리케이션이 시작될 때 클래스가 최초 한번만 메모리를 할당하고(Static) 해당 메모리에 인스턴스를 만들어 사용하는 디자인 패턴. 생성자가 여러번 호출 되더라도 실제로 생성되는 객체는 유일하며 최초 생성 이후 호출된 생성자는 최초에 생성한 객체를 반환한다. 한마디로 인스턴스가 필요한 경우 필요할때마다 생성하고 사용하는 것이 아니라 이전에 생성된 인스턴스를 사용하게 하는 방식이라고 생각하면 된다.

public class TestClass {
    // 인스턴스
    private static TestClass instance = new TestClass();

    // private 생성자
    private TestClass() {}
	
    // 인스턴스 리턴 메소드
    public static TestClass getInstance() {
        return instance;
    }
}

최초에 static 키워드를 붙여줌으로서 전역에서 어디서든 사용할 수 있도록 작성했다.

하지만 접근 제한자를 보면 private이므로 직접적으로 접근하여 사용하는 것을 불가능하다.

생성자도 마찬가지로 private으로 설정되어 클래스로 접근한 후 new 키워드를 통한 객체 생성도 안된다.

해당 인스턴스를 사용하기 위해 getInstance 라는 메소드를 만들고 최초 선언된 인스턴스를 리턴하도록 작성한다.

이러면 외부에서 getInstance를 통해 최초 생성된 객체를 인스턴로 리턴받아 사용할 수 있다.

싱글톤 패턴의 가장 기본적인 방법이라고 한다.

사용이유

한번 생성된 인스턴스를 사용하기 때문에 메모리 낭비를 최소화 할 수 있음.

또한 해당 방식으로 만들어진 인스턴스는 전역 인스턴스이므로 타 클래스의 인스턴스들이 공유하기 쉽다.

단점

싱글톤 인스턴스에 너무 많은 역할이 부여되거나 데이터를 공유시킬 경우 클래스간의 결합도가 높아짐(객체지향원칙과 맞지 않음) 따라서 유지보수 즉, 수정이나 테스트가 더 복잡해진다. 또한 멀티스레드 환경에서는 동기화 처리를 하지 않으면 한개만 생성되야 할 인스턴스가 두개가 생성될 수 있는 경우가 발생함

따라서 적절히 필요한 경우에 따라 유도리 있게 사용하는 것이 좋음(근데 이건 어디서나 다 마찬가지라고 생각함)

profile
놀고싶다

0개의 댓글