// λ§μ»€ μΈν°νμ΄μ€
public interface MarkerInterfaceEx { }
λ§μ»€ μΈν°νμ΄μ€(Marker Interface)λ μ무 λ©μλλ λ΄κ³ μμ§ μκ³ , λ¨μ§ μμ μ ꡬννλ ν΄λμ€κ° νΉμ μμ±μ κ°μ§μ νμν΄ μ£Όλ μΈν°νμ΄μ€λ₯Ό λ§νλ€.
μμλ‘ Serializable μΈν°νμ΄μ€κ° μλ€. Serializableμ ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ ObjectOutputStreamμ ν΅ν΄ μΈ(write) μ μλ€κ³ , μ¦ μ§λ ¬ν(Serialization)ν μ μλ€κ³ μλ €μ€λ€.
// λ§μ»€ μ λν
μ΄μ
public @interface MarkerAnnotationEx { }
λ§μ»€ μ λν μ΄μ μ΄ λ±μ₯νλ©΄μ λ§μ»€ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν νμκ° μλ€κ³ μκ°ν μ μλ€. νμ§λ§ μ¬μ€μ΄ μλλ€.
μ΄λ² κΈμ ν΅ν΄ λ§μ»€ μΈν°νμ΄μ€μ λ§μ»€ μ λ€ν μ΄μ μ λΉκ΅ν΄ λ³΄κ³ , μΈμ 무μμ μ¨μΌ νλμ§ μμ보μ.
π 1. λ§μ»€ μΈν°νμ΄μ€κ° λ§μ»€ μ λν μ΄μ λ³΄λ€ λμ μ
π 1. λ§μ»€ μΈν°νμ΄μ€λ μ΄λ₯Ό ꡬνν μΈμ€ν΄μ€λ€μ ꡬλΆνλ νμ μΌλ‘ μΈ μ μμΌλ, λ§μ»€ μ λν μ΄μ μ κ·Έλ μ§ μλ€.
λ§μ»€ μΈν°νμ΄μ€λ νμ μ΄κΈ° λλ¬Έμ, λ§μ»€ μ λν μ΄μ μ μ¬μ©νλ€λ©΄ λ°νμμμΌ λ°κ²¬λ μ€λ₯λ₯Ό μ»΄νμΌνμμ μ‘μ μ μλ€.
π 2. μ μ© λμμ λ μ λ°νκ² μ§μ ν μ μλ€.
@Target(ElementType.TYPE)
public @interface MarkerAnnotationEx { }
μ μ© λμ(@Target)μ ElementType.TYPEμΌλ‘ μ μΈν μ λν μ΄μ μ λͺ¨λ νμ (ν΄λμ€, μΈν°νμ΄μ€, μ΄κ±° νμ , μ λν μ΄μ )μ λ¬ μ μλ€. λΆμ°©ν μ μλ νμ μ λ μΈλ°νκ² μ ννμ§λ λͺ»νλ€.
κ·Έλ¬λ νΉμ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μλ§ μ μ©νκ³ μΆμ λ§μ»€κ° μλ€κ³ ν΄λ³΄μ. μ΄ λ§μ»€λ₯Ό μΈν°νμ΄μ€λ‘ μ μνλ€λ©΄ κ·Έλ₯ λ§νΉνκ³ μΆμ ν΄λμ€μμλ§ κ·Έ μΈν°νμ΄μ€λ₯Ό ꡬννλ©΄ λλ€.
π 2. λ§μ»€ μ λν μ΄μ μ΄ λ§μ»€ μΈν°νμ΄μ€λ³΄λ€ λμ μ
λ§μ»€ μ λν μ΄μ μ΄ λ§μ»€ μΈν°νμ΄μ€λ³΄λ€ λμ μ μ 'κ±°λν μ λν μ΄μ μμ€ν μ μ§μμ λ°λλ€'λ μ μ΄λ€.
λ°λΌμ λ§μ»€ μ λν μ΄μ μ μ κ·Ήμ μΌλ‘ νμ©νλ νλ μμν¬μμλ λ§μ»€ μ λν μ΄μ μ μ°λ μͺ½μ΄ μΌκ΄μ±μ μ§ν€λλ° μ 리νλ€.
π 3. λ§μ»€ μΈν°νμ΄μ€μ λ§μ»€ μ λν μ΄μ μ μ¬μ©μ²
κ·Έλ λ€λ©΄ μΈμ μ΄λ€ κ²μ μ¨μΌ ν κΉ? κ·Έμ λν μ 리λ μλμ κ°λ€.
- λ§μ»€ μΈν°νμ΄μ€
μλ‘ μΆκ°νλ λ©μλ μμ΄ λ¨μ§ νμ μ μκ° λͺ©μ μΈ κ²½μ° - λ§μ»€ μ λν
μ΄μ
ν΄λμ€λ μΈν°νμ΄μ€ μΈμ νλ‘κ·Έλ¨ μμμ λ§νΉν΄μΌ νλ κ²½μ° (ν΄λμ€λ μΈν°νμ΄μ€λ§μ΄ μΈν°νμ΄μ€λ₯Ό ꡬννκ±°λ νμ₯ν μ μκΈ° λλ¬Έμ΄λ€.)
μ λν μ΄μ μ μ κ·Ή νμ©νλ νλ μμν¬μ μΌλΆλ‘ κ·Έ λ§μ»€λ₯Ό νΈμ μν€κ³ μ νλ κ²½μ°
ν΄λΉ κΈμ Joshua Block λμ 'Effective Java 3/E'λ₯Ό μ°Έκ³ νμμ΅λλ€.