2009-08-28 4 views
2

클래스의 '싱글 톤'은 클래스 사용 방법의 중요한 측면입니다. 그러나 일반적으로 노출 된 클래스 API에는 명시적인 상태가 없습니다. 예, getInstance()와 같은 일반적인 메소드 이름이 자주 사용되지만, 여기에서 언급 한 것과 정확히 일치하지는 않습니다.싱글 톤용 태그 인터페이스

'태그 인터페이스'는 메소드 나 데이터가없는 인터페이스입니다. 태그 인터페이스의 예는 Serializable입니다.

싱글 톤을위한 태그 인터페이스를 정의하는 것이 유용하지 않습니까? 이 것 :

  • 그들을 쉽게
  • 는 싱글 톤이 처리되는 방법을 문서화 할 수있는 장소를 제공하는 더 명시 적 프로젝트
  • 의 코드베이스에서 확인 할 수 있습니다. 하나의 예로, 수명이 긴 객체는 결실을 맺는 메모리 누수의 소스이며, 그 싱글 톤은 단 수명 객체에 연결해서는 안된다는 것을 언급 할 수 있습니다.

이 간단한 아이디어이지만, 나는 그것이 어디 언급 본 적이 없다.

+0

나는'Serializable' 인터페이스가 나쁜 생각으로 여겨졌다 고 생각합니다. 싱글 톤과 다르지 않습니다. –

+0

그들을 사용할지 여부에 대한 질문은 여기서 제기 된 질문의 접선입니다. 물론, 싱글 톤에는 단점이 있습니다. 그러나 어떤 이유로 든 싱글 톤 태그 인터페이스를 사용하는 것이 가장 좋지 않습니까? –

답변

2

당신은 여기에서 종교 전쟁에 발을 들여 놓았습니다. 그러나 저에게는 제 생각에는 장점이있는 것으로 보입니다. 싱글 톤이있는 한 컴파일러와 JVM이 그들의 단일성을 강화할 수 있다면 좋을 것이라고 생각합니다.

싱글 톤은 논쟁의 여지가 있습니다. 남용하기 쉽기 때문입니다. 사람들은 세계적인 상태를 숨기고, 숨겨진 의존성과 엄청난 과용을 위해 사용 지점에 반대합니다. 이들의

없음은 물론, 싱글 - 다움의 개념에 실제로 고유 없지만, 그 논쟁을 변경하지 않습니다.

여기에서 귀하의 경우는 Serializable을 사용하면 도움이되지 않습니다. 왜냐하면 Tom이 지적했듯이, 그 자체로 논쟁의 여지가 있기 때문입니다. 물론, Serializable이 일부 작가의 실수였던 것만 큼 사실 그렇게 만들지는 않는다. 개인적으로, 나는 그것을 사용하지 않지만 실수로 생각하기 때문에가 아니라 ... 나는 단지 내 사용자의 요구에 더 잘 맞는 상태를 유지하고 검색하는 더 나은 방법이 있다는 것을 알게되었다.

물론 있는데, 다른 마커 인터페이스 - Cloneable을, EventThreadListener하고에서 SingleThreadModel, 메모리를 제공하는 경우. 모델로 사용한 경우 더 많이 얻을 수 있습니다.

덧붙여 말하자면, 대부분의 작성자는 "태그 인터페이스"를 "마커 인터페이스"라고 부르는 것에 대해 언급하고 있다고 생각합니다. 큰 문제는 아니지만 주제에 대한 다른 생각을 찾는 데 도움이 될 수 있습니다.

1

흥미로운 아이디어이지만, 얼마나 유용한 지 잘 모르겠습니다. 세 번째 글 머리 기호는 좋은 지적입니다.

더 나은 논의는 "왜 싱글 톤인가?"입니다. Google Singleton Detector은 그들을 찾아 내고 근절을 위해 그들을 확인하는 것이 더 쉬워 질 것입니다. 그들의 FAQ는 내 견해를 표현할 수 있습니다.

0

왜 DI/IoC 컨테이너를 사용하고 개체의 수명을 관리하게해야합니까? 클래스의 수명은 공개 인터페이스에 반영 될 필요가 없습니다.

0

위의 TrueWill은 DI 프레임 워크를 사용하여 개체 수명주기를 처리하는 것에 동의합니다. Guice를 사용하면 싱턴에 태그를 추가하는 싱글 톤 주석을 제공합니다.:)