Item 41. Marker Interface

μ •μ˜ν•˜λ €λŠ” 것이 νƒ€μž…μ΄λΌλ©΄ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ

마컀 μΈν„°νŽ˜μ΄μŠ€λž€ 아무 λ©”μ„œλ“œλ„ λ‹΄κ³  μžˆμ§€ μ•Šκ³ , 단지 μžμ‹ μ„ κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€κ°€ νŠΉμ • 속성을 가짐을 ν‘œμ‹œν•΄μ£ΌλŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. Serializable이 λŒ€ν‘œμ μΈ 마컀 μΈν„°νŽ˜μ΄μŠ€μ΄λ©°, 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λŠ” 직렬화가 κ°€λŠ₯ν•˜λ‹€λŠ” 것을 ν‘œμ‹œν•΄μ€€λ‹€.

public interface Serializable {
    // μ•„λ¬΄λŸ° λ©”μ„œλ“œλ„ μ—†μŒ
}

vs Marker Annotation

μΉ΄λ„ˆ μ• λ„ˆν…Œμ΄μ…˜μ΄ λ“±μž₯ν•˜λ©΄μ„œ 마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” ꡬ식이 λ˜μ—ˆλ‹€λŠ” 이야기가 μžˆμ§€λ§Œ 사싀이 μ•„λ‹ˆλ©°, ν˜„μž¬λ„ 두 가지 이유둜 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.

  • 마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€μ„ κ΅¬λΆ„ν•˜λŠ” νƒ€μž…μœΌλ‘œ μ“Έ 수 μžˆμœΌλ‚˜, 마컀 μ• λ„ˆν…Œμ΄μ…˜μ€ 그렇지 μ•ŠμŒ

    • 마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” κ²°κ΅­ νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ—, 컴파일 νƒ€μž„μ— 였λ₯˜λ₯Ό μž‘μ•„λ‚Ό 수 있음(μ• λ„ˆν…Œμ΄μ…˜μ€ λŸ°νƒ€μž„μ— λ°œμƒν•˜μ—¬ μœ„ν—˜)

  • 적용 λŒ€μƒμ„ 더 μ •λ°€ν•˜κ²Œ 지정 κ°€λŠ₯

    • 마컀 μ• λ„ˆν…Œμ΄μ…˜μ€ @Target(ElementType.TYPE)으둜 μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή μ• λ„ˆν…Œμ΄μ…˜μ„ ν΄λž˜μŠ€μ—λ§Œ 적용 κ°€λŠ₯

    • ν•˜μ§€λ§Œ 마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄κΈ° λ•Œλ¬Έμ— μ μš©ν•˜κ³  싢은 ν΄λž˜μŠ€μ—λ§Œ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©΄ 됨

λ°˜λŒ€λ‘œ 마컀 μ• λ„ˆν…Œμ΄μ…˜μ€ μ• λ„ˆν…Œμ΄μ…˜ μ‹œμŠ€ν…œμ„ 지원 받을 수 μžˆλŠ” μž₯점이 있기 λ•Œλ¬Έμ— 두 방법 λͺ¨λ‘ μ μ ˆν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

  • 마컀 μΈν„°νŽ˜μ΄μŠ€

    • λ§ˆν‚Ήμ΄ 된 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” λ©”μ„œλ“œλ‘œ μž‘μ„±ν•˜λŠ” κ²½μš°κ°€ μžˆμ„ λ•Œ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©

  • 마컀 μ• λ„ˆν…Œμ΄μ…˜

    • ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ μ™Έμ˜ μš”μ†Œ(λͺ¨λ“ˆ, νŒ¨ν‚€μ§€, ν•„λ“œ, μ§€μ—­λ³€μˆ˜ λ“±)듀은 μ• λ„ˆν…Œμ΄μ…˜λ§Œ μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 마컀 μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©

    • λ§ˆν‚Ή 된 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ²½μš°κ°€ μ ˆλŒ€ μ—†λŠ” κ²½μš°μ—” ν΄λž˜μŠ€λ”λΌλ„ 마컀 μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄λ„ 무방

Last updated