심심한잉여의 잡동사니

[디자인 패턴] 싱글톤 패턴(Singleton)이란? 본문

코딩일기/자료 구조

[디자인 패턴] 싱글톤 패턴(Singleton)이란?

심심한잉여 2022. 11. 28. 16:53
반응형

싱글톤(Singleton) 패턴이란?

객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.

public class Singleton {

	private static Test test = new Test();
    
    private Test() {
    	// 생성자는 외부에서 호출 못하게 private으로 지정
    }
    
    public static Test getTest(){
    	return test;
    }

}

장점

싱글톤은 메모리 측면에서 처음에만 new 연산자를 통해 고정된 메모리 영역을 사용하는 것으로 메모리 측면에서 이점을 가져올 수 있다.

따라서, 추후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있으며 이미 생성되어 있는 인스턴스를 활용하여 속도도 더 빠르다는 장점이 있다.

또 다른 장점으론 다른 고셍서도 사용할 때 데이터 공유가 더 간단하다는 것이다.
위 코드로 보면 Test 인스턴스는 전역으로 사용되기 때문에 다른 클래스에서 접근하여 사용하더라도 같은 데이터를 가져 올 수 있다.
하지만 동시성 문제가 발생될 수 있다는 단점을 가지고 있으니 설계 시 유의하길 바란다.

단점

싱글톤 패턴의 문제점으로는 앞서 말한 동시성 문제가 있다.
멀티스레딩 환경에서 동시성 문제가 발생이 되기 때문에 syncronized 키워드를 잘 사용해야 한다.

테스트를 하기 어렵다.
싱글톤으로 구현한 자원이 이미 존재하기 때문에 격리된 환경에서 테스트하기 어렵다는 단점이 있다.
따라서, 이와 같은 테스트를 진행하기 위해선 매번 초기화를 새로 해줘야하지만 이 경우 다른 지점에서 오류가 발생하기 때문에 테스트가 어렵다.

결론

싱글톤의 경우 하나의 인스턴스 생성으로 인한 효율이 있지만 그에 따른 문제점도 많다.
스프링컨테이너와 같은 프레임워크의 도움을 받으면 많은 문제점을 보완하면서 장점을 극대화 시킬 수 있으나 프레임 워크를 사용하지 않고 사용하게 되면 장단점을 잘 고려하여 사용하는 것이 좋을것으로 보인다.

 

반응형