정의 객체의 인스턴스가 오로지 한개만 생성되도록 설계하는 것 클래스의 인스턴스화를 하나의 객체로 제한 왜 쓰는지?? Singleton은 고유한 리소스를 캡슐화하여 애플리케이션 전체에서 쉽게 사용할 수 있도록 함 캘린더, 로깅 등에 사용 됨 why? => 오로지 한개만 필요하기 때문에 기타 장점 인터페이스를 구현 가능 지연 로드 가능 단점 전역 상태는 코드의 결합을 증가시키기 때문에 리팩토링하기가 어려워 진다. 클래스가 싱글톤의 구체적인 구현에 의존하게 된다. → IoC/ DI 컨테이너를 사용하여 객체를 요청하는 하는 것으로 바꿔야 한다. 단위 테스트가 어려워짐 → 생성자를 통해 동적으로 객체를 주입할 수 없어 이런 경우는 필요한 객체를 직접 만들어서 사용해야 하기 때문에 테스트용 객체로 대체하기가 힘듬 ..