싱글톤 패턴(Singleton pattern) 에 대하여
싱글톤 패턴(Singleton pattern)
싱글톤 패턴(Singleton pattern) 은 애플리케이션이 실행될때, 어떤 클래스가 최초로 단 한번만 메모리를 할당하고,
해당 메모리에 인스턴스를 만들어 사용하는 패턴입니다.
즉, 싱글톤패턴은 단 하나의 인스턴스만 생성하여 사용하는 디자인 패턴이라고 할수있습니다.
생성자가 여러번 호출된다 하더라도, 실제로 생성된 객체는 단 하나이며 최초로 생성된 이후에 호출된 생성자는
이미 생성한 객체를 반환 시키도록 만드는것뿐입니다.
보통 JAVA 에서는 private 로 선언해 getInstance() 메소드를 사용해 사용하도록 구현합니다.
목적
커넥션 풀, 스레드풀, 디바이스 설정 객체등의 경우에 인스턴스를 여러개 만들게되면 자원을 쓸데없이 낭비하게 되거나 버그를
발생시킬수있습니다.
그렇게 때문에 우리는 싱글톤 패턴을 통해 오직 하나의 인스턴스만 생성하고 그것을 사용하는것입니다.
또한 싱글톤 패턴을 통해 구현한 인스턴스는 전역에서 사용할수있으므로 다른 클래스의 인스턴스들이
데이터를 공유 할수있다는것이 장점입니다.
또한 두번째 이용시 부터 객체 로딩시간이 현저하게 줄어들어 성능이 개선된다는 장점이있습니다.
단점
객체지향 설계원칙 5개중 한가지인 개방-폐쇄 원칙이라는것이 존재하는데,
만약 싱글톤 인스턴스가 혼자 너무 많은 일을 하게되거나 많은 데이터를 클래스간에 공유시키게 되면,
다른 클래스간의 결합도가 높아지게 되는데 이때 개방-폐쇄의 원칙에 위배됩니다.
결합도가 높아지면 유지 보수가 힘들어지고 테스트를 원할하게 진행할수 없게되는 문제점이 발생합니다.
또한 멀티스레드 환경에서 공유자원을 통해 스레스가 접근하게 되므로 동기화 처리를 하지않았을때, 인스턴스가 2개가 생성되는 문제도
발생할수있습니다.
따라서 반드시 싱글톤이 필요한 상황이 아니라면 지양 하는것이 좋습니다.
주된 사용처
공통된 객체를 여러개 생성해서 사용되는 상황에 사용합니다.
주로 커넥션풀, 스레드풀, 캐시 등이 있습니다.
또한 인스턴스가 절대적으로 한개만 존재해야하는것을 보증하고 싶을때 사용합니다.
#Reference
http://asfirstalways.tistory.com/335
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Design%20Pattern/Singleton%20Pattern.md
https://jeong-pro.tistory.com/86