명명 패턴
Junit 3
까지 테스트 메서드의 이름이 test
로 시작해야만 했던 것과 같이 이름을 짓는 규칙
명명 패턴의 문제
- 오타
- 올바른 프로그램 요소만 사용되리란 보증이 없음
- 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없음
어노테이션
jdk 5
부터 추가된 기능, 추가적인 정보를 제공하는 메타 데이터
메타 데이터
이기 때문에 비즈니스 로직에 직접적인 영향을 주진 않지만, 이 정보에 따라서 실행 흐름을 변경할수 있는 코딩이 가능하여 더 깔끔한 코딩이 가능해 질 수 있음
마커 어노테이션 (Marker annotation)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {}
메타 어노테이션: 어노테이션 선언에 다는 어노테이션
@Retention(RetentionPolicy.RUNTIME): 런타임에도 유지
@Target(ElementType.METHOD): 메서드 선언에만 사용되어야 함
매개 변수를 가진 어노테이션
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionTest {
Class<? extends Throwable> value();
}
public class Test {
@ExceptionTest(ArithmeticException.class)
public static void doSomething() {
int i = 1/0;
}
}
배열 매개변수를 받는 어노테이션
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionTest {
Class<? extends Throwable>[] value();
}
public class Test {
@ExceptionTest({ IndexOutOfBoundsException.class, NullPointerException.class })
public static void doSomething() {
List<String> strings = new ArrayList<>();
strings.addAll(3, null);
}
}
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
[Effective Java] Item41. 정의하려는 것이 타입이면 마커 인터페이스를 활용하라 (0) | 2022.07.03 |
---|---|
[Effective Java] Item40. @Override 애너테이션을 일관되게 사용하라 (0) | 2022.07.03 |
[Effective Java] Item38. 확장가능한 열거 타입이 필요하면 인터페이스 (0) | 2022.06.26 |
[Effective Java] Item 37. ordinal 인덱싱 대신 EnumMap (0) | 2022.06.26 |
[Effective Java] Item36. 비트 필드 대신 EnumSet (0) | 2022.06.26 |