싱글 톤이 "불량"인지, 대신 어떤 패턴을 사용해야하는지에 관해 많은 질문이 있습니다. 일반적으로 클래스의 정적 메서드에서 싱글 톤 인스턴스를 검색하는 싱글 톤 디자인 패턴에 중점을 둡니다. 이 질문 중 하나가 아닙니다.의존성 삽입을 사용하고 있습니다. 어떤 유형을 싱글 톤으로 바인딩해야합니까?
몇 달 전에 의존성 주입을 실제로 "발견 했으므로"나는 우리 팀에서 채택을 추진하고 있으며 시간이 지남에 따라 코드에서 정적 및 싱글 톤 패턴을 제거하고 가능하면 생성자 기반 주입을 사용했습니다. 우리는 DI 모듈에 명시적인 바인딩을 계속 추가 할 필요가 없도록 규칙을 채택했습니다. DI 프레임 워크를 사용하여 로거 인스턴스를 제공하므로 추가 코드없이 각 로거에 자동으로 알릴 수 있습니다. 이제는 여러 유형이 묶이는 방법을 제어 할 수있는 단일 장소가 있으므로 클래스의 특정 카테고리 (유틸리티 클래스, 리포지토리 등)의 라이프 사이클을 결정하는 것은 정말 쉽습니다.
초기 생각은 클래스를 상당히 자주 사용하기를 기대한다면 클래스를 싱글 톤으로 바인딩하는 것이 도움이된다는 것입니다. 그것은 단지 생성하는 객체가 큰 의존성 트리를 가지고 끝날 때 훨씬 더 적은 숫자가 발생한다는 것을 의미합니다. 거의 모든 클래스의 비 정적 필드는 생성자에 주입되는 값이므로 사용되지 않을 때 인스턴스를 유지하는 데 비교적 적은 메모리 오버 헤드가 발생합니다.
그렇다면 나는 "싱글턴을 사랑하지만, 당신은 www.codingwithoutcomments.com"에서 나를 데려왔다. 그리고 그것은 나에게 내가 올바른 생각을 가지고 있는지 궁금하게 만들었다. 결국, Ninject는 기본적으로 객체 생성 함수를 컴파일하므로 이러한 객체의 추가 인스턴스를 생성 할 때 반영되는 오버 헤드가 거의 없습니다. 우리는 비즈니스 로직을 생성자 밖으로 유지하기 때문에 새로운 인스턴스를 만드는 것은 실제로 매우 가벼운 작업입니다. 그리고 객체에는 정적 필드가 많지 않으므로 새 인스턴스를 만드는 데 많은 메모리 오버 헤드가 발생하지 않습니다.
그래서이 시점에서 나는 어느 쪽이든별로 중요하지 않다고 생각하기 시작했습니다. 내가 고려하지 않은 추가 고려 사항이 있습니까? 특정 유형의 객체의 수명주기를 변경하여 성능을 크게 향상시킨 경험이 있습니까? DI 패턴을 따르는 것이 진짜 중요한 것입니까, 아니면 객체의 단일 인스턴스를 사용하는 것이 본질적으로 "나쁘다"는 다른 이유가 있습니까?
+1 질문에 대한 답변. – StriplingWarrior