item 39 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μμ΄ν
39 λͺ
λͺ
ν¨ν΄λ³΄λ€ μ λν
μ΄μ
μ μ¬μ©νλΌ
- μ ν΅μ μΌλ‘ λꡬλ νλ μμν¬κ° νΉλ³ν λ€λ€μΌ ν νλ‘κ·Έλ¨ μμμλ λ± κ΅¬λΆλλ λͺ
λͺ
ν¨ν΄μ μ μ©ν΄μλ€.
μ컨λ ν
μ€νΈ νλ μμν¬μΈ JUnitμ λ²μ 3κΉμ§ ν
μ€νΈ λ©μλ μ΄λ¦μ testλ‘ μμνκ²λ νλ€.
λͺ
λͺ
ν¨ν΄μ λ¨μ
- μ€νκ° λλ©΄ μλλ€. λ§μ½ κ°λ°μμ μ€μλ‘ μ€νκ° λ°μνλλΌλ μ΄λ₯Ό κ²μ¦νκΈ°κ° μ½μ§ μλ€.
- μ¬λ°λ₯Έ νλ‘κ·Έλ¨μ μμμμλ§ μ¬μ©λλ¦¬λΌ λ³΄μ¦ν λ°©λ²μ΄ μλ€.
μλ₯Ό λ€μ΄ λ©μλμμλ§ μ¬μ©κ°λ₯ν λͺ
λͺ
ν¨ν΄μ ν΄λμ€ λͺ
μλ μ¬μ©νμ§ λͺ»νκ² κ°μ ν μ μλ λ°©λ²μ΄ μλ€.
- νλ‘κ·Έλ¨ μμλ₯Ό λ§€κ°λ³μλ‘ μ λ¬ν λ§λ
ν λ°©λ²μ΄ μλ€.
μ΄λ¦ μμ ν¨κΌ λΆμ¬μ μ λ¬ν μλ μκ² μ§λ§, 보기λ λμκ³ κΊ μ§κΈ°λ μ½λ€.
μ λ¨μ μ λͺ¨λ ν΄κ²°ν΄μ£Όλ μ λν
μ΄μ
!
import java.lang.annotation.*;
/**
* ν
μ€νΈ λ©μλμμ μ μΈνλ μ λν
μ΄μ
μ΄λ€.
* λ§€κ°λ³μ μλ μ μ λ©μλ μ μ©μ΄λ€.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}
- μμ²λΌ μ λν
μ΄μ
μ μΈμ λ€λ μ λν
μ΄μ
μ λ©νμ λν
μ΄μ
(meta-annotation)μ΄λΌ νλ€.
@Retention(RetentionPolicy.RUNTIME) λ©νμ λν
μ΄μ
μ @Testκ° λ°νμμλ μ μ§λμ΄μΌ νλ€λ νμλ€.
λ§μ½ μ΄ λ©νμ λν
μ΄μ
μ μλ΅νλ©΄ ν
μ€νΈ λꡬλ @Testλ₯Ό μΈμν μ μλ€.
ννΈ, @Target(ElementType.METHOD) λ©νμ λν
μ΄μ
μ @Test κ° λ°λμ λ©μλ μ μΈμμλ§ μ¬μ©λΌμΌ νλ€κ³ μλ €μ€λ€.
λ°λΌμ ν΄λμ€ μ μΈ, νλ μ μΈ λ± λ€λ₯Έ νλ‘κ·Έλ¨ μμμλ λ¬ μ μλ€.
λ§€κ°λ³μ νλλ₯Ό λ°λ μ λν
μ΄μ
νμ
import java.lang.annotation.*;
/**
* λͺ
μν μμΈλ₯Ό λμ ΈμΌλ§ μ±κ³΅νλ ν
μ€νΈ λ©μλμ© μ λν
μ΄μ
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionTest {
Class<? extends Throwable> value();
}
public class Sample2 {
@ExceptionTest(ArithmeticException.class)
public static void m1() { // μ±κ³΅ν΄μΌ νλ€.
int i = 0;
i = i / i;
}
@ExceptionTest(ArithmeticException.class)
public static void m2() { // μ€ν¨ν΄μΌ νλ€. (λ€λ₯Έ μμΈ λ°μ)
int[] a = new int[0];
int i = a[1];
}
@ExceptionTest(ArithmeticException.class)
public static void m3() { } // μ€ν¨ν΄μΌ νλ€. (μμΈκ° λ°μνμ§ μμ)
}
- reflection μ μ΄μ©ν΄ valueμ μ κ·Όν μ μκ³ κ·Έμ λ°λΌ λ€λ₯Έ λμμ ꡬνν μ μλ€.
μ 리
- μ΄λ² μμ΄ν
μ ν
μ€νΈ νλ μμν¬λ μμ£Ό κ°λ¨νμ§λ§ μ λν
μ΄μ
μ΄ λͺ
λͺ
ν¨ν΄λ³΄λ€ λ«λ€λ μ μ νμ€ν 보μ¬μ€λ€.
ν
μ€νΈλ μ λν
μ΄μ
μΌλ‘ ν μ μλ μΌ μ€ κ·Ήν μΌλΆμΌ λΏμ΄λ€.
μ λν
μ΄μ
μΌλ‘ ν μ μλ μΌμ λͺ
λͺ
ν¨ν΄μΌλ‘ μ²λ¦¬ν μ΄μ λ μλ€.