[Effective Java] 작명 패턴보다는 주석(annotation)을 사용하자. |
-
1.5 배포판 이전에는 도구나 프레임워크에서 특별히 취급할 필요가 있는 프로그램 요소들을 나타내기 위해 작명 패턴(naming pattern)을 사용하는 것이 일반적.
예를 들어 JUnit 테스팅 프레임워크에서는 테스트 메소드들의 이름을 test로 시작하도록 하였다.
이 방법은 효과는 있지만 단점들이 있다.
1. 철자상의 오류로 인한 오류
2. 적합한 프로그램 요소에만 사용되는지 확신할 방법이 없다.
3. 매개 변수 값을 프로그램 요소와 연관시키는 좋은 방법을 제공하지 않는다.
-
작명패턴의 단점은 annotation 을 사용하여 깔끔히 해결된다.
-
annotation 정의는 다음과 같이 한다.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AnnotationName{
}
@Retention 은 Runtime 에 이 annotation 이 유지되어야 하는지를 나타내고,
@Target 은 이 annotation 이 적용 가능한 범위를 나타낸다.
@Retention 과 @Target 을 메타 주석(meta-annotation)이라 부른다.
-
annotation 정의에는 compiler 가 할 수 없는 내용을 꼭 적어 주어야 한다.
예를 들면 "매개변수가 없는 static 메소드에만 사용할 것." 와 같이.
-
...
public @interface ExceptionTest{
Class<? extends Exception> value();
}
Class<? extends Exception> 은 annotation 의 매개변수 타입을 나타낸다.
-
여러개의 Exception 을 허용하려면 다음과 같이 정의한다.
public @interface ExceptionTest{
Class<? extends Exception>[] value();
}
-
주석을 사용할 수 있는 지금, 굳이 작명 패턴을 써야 할 이유가 없다.
-
툴스미스(tool smith, 테스트 도구를 잘 알고 다루는 사람) 이외에는 대부분의 프로그래머가 주석 타입을 정의할 필요는 없을 것이다.
그러나 모든 프로그래머는 자바 플랫폼에서 제공하는 사전 정의된 주석 타입을 반드시 사용해야 한다.
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 타입 정의는 표시 인터페이스를 사용하자. (0) | 2017.01.05 |
---|---|
[Effective Java] Override 주석을 일관성 있게 사용하자. (0) | 2017.01.03 |
[Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. (0) | 2016.12.29 |
[Effective Java] ordinal 인덱스 대신 EnumMap 을 사용하자. (0) | 2016.12.27 |
[Effective Java] 비트(bit) 필드 대신 EnumSet 을 사용하자. (0) | 2016.12.26 |
댓글