일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 소프트웨어
- 네트워크보안
- 보안
- I'm Sorry
- 소프트웨어공학
- 데이터과학
- 파이썬
- 웹개발
- 컴퓨터비전
- 데이터베이스
- 머신러닝
- 데이터구조
- 코딩
- 인공지능
- 딥러닝
- 버전관리
- 데이터분석
- 컴퓨터과학
- 프로그래밍
- 빅데이터
- 컴퓨터공학
- 자바스크립트
- 자료구조
- Yes
- 사이버보안
- 네트워크
- 프로그래밍언어
- 알고리즘
- 2
- 클라우드컴퓨팅
- Today
- Total
스택큐힙리스트
싱글톤 패턴의 단점이나 불이익은 무엇인가요? [닫힘] 본문
현재 폐쇄되었습니다. 이 질문은 opinion-based 입니다. 현재 답변을 받지 않고 있습니다.
이 질문을 개선하고 싶으세요? editing this post 님이 사실과 인용으로 대답할 수 있는 질문으로 업데이트하십시오.
7년 전에 닫혔습니다.
커뮤니티는 이 질문을 1년 전에 다시 열 것인지 검토했고, 닫힌 채로 남겼습니다.
원래의 종료 이유가 해결되지 않았습니다.
Improve this question
singleton pattern은 GoF의 완전히 유료 회원입니다. 하지만 최근에는 개발자 세계에서 씁쓸한 처지에 놓여있는 것 같습니다. 저는 아직도 factory classes를 위해 싱글톤을 꽤 많이 사용합니다. 멀티스레딩 문제에 대해서는 다른 클래스들과 마찬가지로 조심해야 하지만, 왜 그렇게 끔찍한지 이해가 되지 않습니다.
스택 오버플로우는 특히 싱글톤이 악마라는 것에 대해 모두 동의한다고 가정하는 것 같습니다. 왜 그럴까요?
사실, 참고 자료 또는 특정 전문 기술로 답변을 지원해주세요.
답변 1
브라이언 버튼의 패러프레이즈:
일반적으로 글로벌 인스턴스로 사용됩니다. 그 이유가 그렇게 나쁜 이유는 무엇일까요? 인터페이스를 통해 의존성을 노출시키는 대신에 응용 프로그램의 종속성을 코드에 숨기기 때문입니다. 무언가를 전달하지 않고 글로벌 변수로 만들면 code smell 입니다.
그들은 자신의 창조와 수명을 통제하기 때문에 single responsibility principle를 위반합니다.
그것들은 본질적으로 코드를 아주 엄격하게 만든다. 이로 인해 테스트 중에 그것들을 속이기가 매우 어려울 때가 많다.
앱의 수명 동안 상태를 유지합니다. 이는 테스트에 대한 또 다른 부담이 됩니다. 단위 테스트에서는 테스트가 순서대로 실행되는 상황이 발생할 수 있으므로 매우 바람직하지 않습니다. 왜냐하면 각 단위 테스트는 다른 테스트와 독립적이어야 하기 때문입니다.
답변 2
싱글톤 패턴은 객체를 하나의 인스턴스로 유지하도록 구현하는 디자인 패턴입니다. 이 디자인 패턴은 많은 장점을 가지고 있지만, 일부 단점이 있습니다.첫 번째 단점은 전역 상태를 유지하게 되어 다른 모듈에 영향을 미칠 수 있다는 것입니다. 싱글톤 인스턴스가 수정되면 다른 코드에서도 그 영향을 받을 수 있습니다. 이런 상황은 디버깅을 어렵게 만들 수 있습니다.
두 번째로, 멀티 스레드 환경에서는 동시성 문제가 발생할 수 있습니다. 여러 스레드가 싱글톤 객체에 접근하면 동시성 문제가 발생할 수 있습니다. 이 때문에 인스턴스를 만들 때, 쓰레드 세이프한 방식으로 만들어야 합니다.
세 번째로, 단위 테스트의 경우 싱글톤 인스턴스를 모킹하기 어려울 수 있습니다. 만약 싱글톤 객체를 사용하는 클래스가 있다면, 그 객체가 리턴하는 결과를 검증하는데 어려움을 겪을 수 있습니다.
마지막으로, 싱글톤 패턴은 의존성을 강화시킵니다. 즉, 싱글톤 객체를 사용하는 다른 클래스는 해당 객체에 의존하게 됩니다. 이런 상황은 코드의 유연성을 떨어뜨릴 수 있습니다.
결론적으로, 싱글톤 패턴은 많은 장점을 가지고 있지만, 일부 단점이 있습니다. 이러한 단점을 고려하여 싱글톤 패턴을 구현해야 합니다.