싱글 톤이 안티 패턴으로 간주되는 이유는 무엇입니까?
중복 가능성 :
싱글 톤의 단점은 무엇입니까?
최근에 Singleton이 반 패턴이라고 들었습니다. 클래스 싱글 톤을 만드는 것은 고유 한 인스턴스를 전역 변수로 만드는 것과 관련이 있다는 사실과 관련이 있다는 것을 알고 있지만, 그보다 더 많은 일을합니다 (해당 객체의 인스턴스 수 제한, 인스턴스화 관리 등).
Singleton이 정확히 안티 패턴으로 간주되는 이유는 무엇입니까? 그리고 대안은 무엇입니까?
답변을 돕기 위해 다음은 안티 패턴 주석에 대한 추가 정보입니다.
과도하게 사용되어 클래스의 유일한 인스턴스가 실제로 필요하지 않은 상황에서 불필요한 제한을 도입하고 응용 프로그램에 전역 상태를 도입합니다.
출처 : http://en.wikipedia.org/wiki/Singleton_pattern
이에 대한 자세한 내용은 https://www.michaelsafyan.com/tech/design/patterns/singleton을 참조하십시오.
다음은 위 블로그의 멋진 결말입니다.
요컨대, 싱글 톤 패턴은 코드를 더 복잡하고 덜 유용하게 만들고 재사용이나 테스트에 큰 고통을줍니다. 싱글 톤을 제거하는 것은 까다로울 수 있지만 가치있는 노력입니다.
좋습니다, 그래서 그것이 안티 패턴 인 이유는이 단락에 잘 설명되어 있습니다. 그리고 저자가 표현했듯이, 그것은 당신의 코드를 싱글 톤에 단단히 연결합니다.
싱글 톤을 사용하려는 경우 설계를 고려할 수 있지만 유용한 경우가 있습니다.
예를 들어, 수천 개의 요청을 처리하기 위해 최대 하나의 데이터베이스 연결을 가질 수있는 애플리케이션을 작성해야했습니다. 따라서 단일 인스턴스는 하나의 인스턴스 만 갖는 것으로 리소스가 제한되어 있기 때문에 의미가 있습니다.
그러나 일반적으로 이것은 도입 될 어려움을 생각하지 않고 코드를 단순화하는 데 사용됩니다.
예를 들어 이것은 정적 클래스에도 적용됩니다. 단위 테스트를하거나 동시성이있는 경우 한 요청의 상태가 상태를 변경하고 문제를 일으킬 수 있습니다. 인스턴스를 호출하는 클래스가 상태를 그대로 가정 할 수 있기 때문입니다. 예상됩니다.
사용에 도전하는 가장 좋은 방법은 프로그램이 다중 스레드 인 경우 처리하는 방법을 생각하는 것이며, 한 번에 여러 테스트를 실행하는 경우 단위 테스트를 수행하는 간단한 방법이라고 생각합니다.
여전히 필요하다고 생각되면 사용하되 나중에 발생할 문제를 인식하십시오.
나는 싱글 톤을 안티 패턴이라고 정확히 생각하지 않을 것입니다.
그러나 싱글 톤은 기본적으로 전역 변수를 사용하는 방법입니다. 그리고 전역 변수는 시스템의 모든 코드가 값을 변경할 수 있기 때문에 좋지 않습니다. 따라서 디버깅 할 때 어떤 코드 경로가 싱글 톤의 현재 상태로 연결되는지 파악하기 어려울 수 있습니다.
Singleton 클래스는 다른 개체에 의해 일반적인 방식으로 인스턴스화 될 수 없기 때문에 안티 패턴으로 간주됩니다 (일반적으로 "getInstance"라는 메서드를 호출하는 경우 제외). 따라서 사용 가능한 객체를 먼저 생성하기 위해 인스턴스화하지 않고 클래스가 직접 사용되는 것처럼 보일 것입니다.
Singleton이 글로벌 고유 인스턴스 역할을 할 수 있다는 데 동의합니다. 저는 일부 사람들로부터 Singleton의 대안으로 정적 및 / 또는 최종 변수를 사용할 수 있으며 열거 형을 사용할 수도 있다는 것을 배웠습니다. 일반 클래스 / 객체).
그러나 이러한 대안은 상태 / 값을 저장할 때 Singleton 클래스의 기능과 만 일치 할 수 있습니다. 작업 할 고유 한 함수가 필요한 경우 이러한 정적 / 최종 변수 및 열거는 도움이되지 않습니다. 제 생각에는 Singleton 클래스를 사용해야하는 경우입니다 (정적 / 최종 상태 / 값으로 작업하기 위해 고유 한 함수가 필요한 경우).
건배 ... :))
싱글 톤은 종종 잘못 구현됩니다. 이중 확인 잠금을 참조하십시오.
Singleton 인스턴스가 고유해야하는 범위입니다. 멀티 스레드 환경, 클러스터링 등
싱글 톤은 테스트하기 어려울 수 있습니다.
Singleton에 할당 된 메모리는 해제 할 수 없습니다.
싱글 톤을 과도하게 사용하면 객체 지향 프로그래밍에서 절차 적 프로그래밍으로 넘어갑니다.
참고 URL : https://stackoverflow.com/questions/12755539/why-is-singleton-considered-an-anti-pattern
'programing tip' 카테고리의 다른 글
TABLOCK 대 TABLOCKX (0) | 2020.11.02 |
---|---|
setUseWideViewPort () 및 setLoadWithOverviewMode ()는 정확히 무엇을합니까? (0) | 2020.11.02 |
Pandas DataFrame에 메타 정보 / 메타 데이터 추가 (0) | 2020.11.02 |
동적으로 생성 된 요소에 대한 jQuery "생성시"이벤트 (0) | 2020.11.02 |
단편화 여부-활동에 대한 중첩 단편. (0) | 2020.11.02 |