마커 인터페이스 패턴

Marker interface pattern

마커 인터페이스 패턴컴퓨터 공학에서 디자인 패턴으로, 개체에 대한 런타임 유형 정보를 제공하는 언어와 함께 사용된다.그것은 언어가 그러한 메타데이터를 명시적으로 지원하지 않는 클래스와 메타데이터를 연결하기 위한 수단을 제공한다.

이 패턴을 사용하기 위해 클래스마커 인터페이스[1](태깅 인터페이스라고도 함)와 인터페이스의 존재에 대해 해당 클래스 테스트의 인스턴스와 상호 작용하는 방법을 구현한다.일반적인 인터페이스는 구현 클래스가 지원해야 하는 기능성을 (방법 선언의 형태로) 지정하는 반면에, 마커 인터페이스는 그렇게 할 필요가 없다.그러한 인터페이스의 존재만으로도 구현 등급의 특정 행동을 나타낸다.마커 역할을 하고 필요한 방법을 지정하는 하이브리드 인터페이스는 가능하지만 부적절하게 사용될 경우 혼동될 수 있다.

Java 프로그래밍 언어에서 마커 인터페이스의 적용 예로는Serializable접점클래스는 이 인터페이스를 구현하여 비투명 데이터 구성원이 에 기록될 수 있음을 나타냄ObjectOutputStream. TheObjectOutputStream사적 방법writeObject0(Object,boolean)일련의instanceof쓰기 가능 여부를 결정하기 위한 테스트, 그 중 하나는Serializable접점이러한 테스트 중 하나라도 실패하면 이 방법은NotSerializableException.

비평

마커 인터페이스의 주요 문제는 인터페이스가 클래스를 구현하기 위한 계약을 정의하고 그 계약이 모든 하위 클래스에 의해 상속된다는 것이다.이것은 당신이 마커를 "실행"할 수 없다는 것을 의미한다.주어진 예에서 직렬화하지 않을 하위 클래스를 생성하는 경우(아마도 과도 상태에 따라 다르기 때문에) 명시적으로 던지는 방법을 사용해야 한다.NotSerializableException(당)ObjectOutputStream문서)

다른 해결책은 언어가 메타데이터를 직접 지원하는 것이다.

  • 둘 다.NET FrameworkJava(Java 5(1.5 기준))는 이러한 메타데이터를 지원한다..NET에서는 "사용자 지정 속성"이라고 하고, Java에서는 "알림"이라고 부른다.다른 이름에도 불구하고, 그들은 개념적으로 같은 것이다.그것들은 클래스, 멤버 변수, 방법 및 방법 매개변수에 정의될 수 있으며 반사를 사용하여 접근할 수 있다.
  • 파이썬에서 마커 인터페이스(marker interface)라는 용어는 조페(Zope)와 플론(Plone)에서 흔히 볼 수 있다.인터페이스가 메타데이터로 선언되고 하위 클래스가 사용할 수 있음implementsOnly슈퍼클래스의 모든 것을 이행하지 않는다고 선언하는 것.

참고 항목

  • 이 패턴의 확장을 위한 마커 설계.
  • Joshua Bloch, "Effective Java (제2판)" 항목 37: 마커 인터페이스를 사용하여 유형을 정의, 179페이지(제3판:항목 41, 페이지 191).

참조

  1. ^ Bloch, Joshua (2008). "Item 37: Use marker interfaces to define types". Effective Java (Second edition). Addison-Wesley. p. 179. ISBN 978-0-321-35668-0.