개인과제를 하는 객체가 실행될때마다 초기화가 되어서
튜터님께 힌트를 얻고 공부한 내용을 정리 해보고자 한다
싱글톤 패턴이란?
싱글톤 패턴은 객체 지향 프로그래밍에서 특정 클래스가 단 하나만의 인스턴스를 생성하여 사용하기 위한 패턴이다. 생성자를 여러 번 호출하더라도 인스턴스가 하나만 존재하도록 보장하여 애플리케이션에서 동일한 객체 인스턴스에 접근할 수 있도록 한다.
사용하는이유
커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 프로그램이 예상치 못한 결과를 낳을 수 있다. 따라서 객체를 필요할 때마다 생성하는 것이 아닌 단 한 번만 생성하여 전역에서 이를 공유하고 사용할 수 있게 하기 위해 싱글톤 패턴을 사용한다.
싱글톤 패턴의 장단점
장점
유일한 인스턴스 : 싱글톤 패턴이 적용된 클래스의 인스턴스는 애플리케이션 전역에서 단 하나만 존재하도록 보장한다. 이는 객체의 일관된 상태를 유지하고 전역에서 접근 가능하도록 한다.
메모리 절약 : 인스턴스가 단 하나뿐이므로 메모리를 절약할 수 있다. 생성자를 여러 번 호출하더라도 새로운 인스턴스를 생성하지 않아 메모리 점유 및 해제에 대한 오버헤드를 줄인다.
지연 초기화 : 인스턴스가 실제로 사용되는 시점에 생성하여 초기 비용을 줄일 수 있다.
단점
결합도 증가 : 싱글톤 패턴은 전역에서 접근을 허용하기 때문에 해당 인스턴스에 의존하는 경우 결합도가 증가할 수 있다.
테스트 복잡성 : 싱글톤 패턴은 단 하나의 인스턴스만을 생성하고 자원을 공유하기 때문에 싱글톤 클래스를 의존하는 클래스는 결합도 증가로 인해 테스트가 어려울 수 있다.
상태 관리의 어려움 : 만약, 싱글톤 클래스가 상태를 가지고 있는 경우 전역에서 사용되어 변경될 수 있다. 이로 인해 예상치 못한 동작이 발생할 수 있다.
전역에서 접근 가능 : 애플리케이션 내 어디서든 접근이 가능한 경우, 무분별한 사용을 막기 힘들다. 이로 인해 변경에 대한 복잡성이 증가할 수 있다.
싱글톤 패턴을 사용할 때에는 장단점을 고려하여 상황에 맞게 적절히 사용해야 한다. 단 하나의 인스턴스를 생성하여 메모리 효율성을 높일 수 있지만, 그로 인해 따를 수 있는 문제점들이 있기 때문이다.
싱글톤 패턴의 기본 구현
싱글톤 패턴을 적용할 경우 두 개 이상의 객체는 존재할 수 없다. 이를 구현하기 위해서는 객체 생성을 위한 new 생성자에 제약을 걸어야 하고, 만들어진 단일 객체를 반환할 수 있는 메서드가 필요하다. 따라서 다음 세 가지 조건이 반드시 충족되어야 한다.
new 키워드를 사용할 수 없도록 생성자에 private 접근 제어자를 지정해야 한다.
유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
구현 코드

singletonObject는 단일 객체를 저장하기 위한 정적 참조 변수다.
외부에서는 해당 객체를 생성할 수 없도록 생성자를 private로 지정한다.
getInstance() 메서드를 통해 인스턴스를 얻을 수 있다.
getInstance()를 최초로 실행할 때에만 초기화한다. (지연 초기화)
싱글톤 패턴 사용

출력

싱글톤 객체를 getInstance()를 통해 여러 변수에서 호출하더라도 같은 인스턴스를 참조한다.
정리
싱글톤 패턴은 객체의 인스턴스가 단 하나만을 생성하도록 만드는 디자인 패턴이다.
private 생성자를 가져야 하는 특징이 있다.
단일 객체 참조 변수는 static 이어야 하고 getInstance() 메서드를 참조한다.
변경 여지가 있는 상태 값을 가지지 않는 것이 좋다.
멀티 스레드 환경의 경우 Thread Safe한 구현 방법을 고려해야 한다.
Thread Safe한 싱글톤 패턴은 Bill Pugh Solution 방법과 Enum 사용을 권장하고 있다.