Item 33. Type Safe Heterogeneous Container
νμ μμ μ΄μ’ 컨ν μ΄λλ₯Ό κ³ λ €νλΌ
μ λ€λ¦μ Set
, Map
κ°μ 컬λ μ
κ³Ό ThreadLocal
, AtomicReference
κ°μ λ¨μΌ μμ 컨ν
μ΄λμλ μμ£Ό μ¬μ©λλ€.
보ν΅μ νλ(Set
) νΉμ λ κ°(Map
)μ νμ
맀κ°λ³μκ° μ¬μ©λμ§λ§, λλ‘λ μΈ κ° μ΄μμ μμ κ°μκ° νμν κ²½μ°κ° μλ€.
νμ
μμ μ΄μ’
컨ν
μ΄λ(type safe heterogeneous container)
νμ μμ μ΄μ’ 컨ν μ΄λ ν¨ν΄μ μ΄μ©νμ¬ μμ νμ μ μμλ₯Ό μ μ₯νκ³ κ²μν μ μλ 컨ν μ΄λλ₯Ό λ§λ€ μ μλ€. 컨ν μ΄λ λμ ν€λ₯Ό 맀κ°λ³μνν λ€, 컨ν μ΄λμ κ°μ λ£κ±°λ λΊ λ 맀κ°λ³μνν ν€λ₯Ό ν¨κ» μ 곡νλ λ°©μμΌλ‘ μ΄λ κ² νλ©΄ μ λ€λ¦ νμ μμ€ν μ΄ κ°μ νμ μ΄ ν€μ κ°μμ 보μ₯νκ² λλ€.
κ° νμ
μ Class κ°μ²΄λ₯Ό 맀κ°λ³μνν ν€ μν λ‘ μ¬μ©ν μ μλλ°, μ΄ λ°©μμ΄ λμνλ μ΄μ λ classμ ν΄λμ€κ° μ λ€λ¦μ΄κΈ° λλ¬Έμ΄λ€.
μμλ‘ μλμ Favorites
λΌλ ν΄λμ€λ₯Ό 보μ.
Favoriteμμ Map<Class<?>, Object>
λ₯Ό μ¬μ©νκ³ μμΌλ©°, κ·Έ νΉμ§μ λ€μκ³Ό κ°λ€.
Key(
Class<?>
): ν΄λμ€ λ¦¬ν°λ΄λ‘, νΉμ ν΄λμ€λ‘ μ ννμ§ μκ³ , λͺ¨λ ν΄λμ€λ₯Ό νμ©νλ€.Value(
Object
): ν΄λμ€μ μΈμ€ν΄μ€μ΄λ©°, Objectλ‘ μ ννμ§ μκ³ , λͺ¨λ ν΄λμ€λ₯Ό νμ©νλ€.Valueκ° λ¨μ
Object
μ΄κΈ° λλ¬Έμ ν€μ κ° μ¬μ΄μ νμ κ΄κ³λ₯Ό 보μ¦νμ§ μμ§λ§, λ Όλ¦¬μ μΌλ‘λ ν€μ κ°μ νμ κ΄κ³κ° 보μ₯λλ€.
?
(λΉνμ μ μμΌλμΉ΄λ νμ
)κ° μ‘΄μ¬νμ¬ μ΄λΌ μ무κ²λ λ£μ μ μλ κ²μ²λΌ 보μ΄μ§λ§,
μμΌλμΉ΄λ νμ
μ΄ μ€μ²©(nested)λμ΄ μκΈ° λλ¬Έμ λ§΅μ΄ μλλΌ ν€κ° μμΌλμΉ΄λ νμ
μ΄λ―λ‘ Class<?>
λ λͺ¨λ ν΄λμ€λ₯Ό νμ©νλ νμ
μ΄ λλ€.
νμ
μμ μ΄μ’
컨ν
μ΄λμ μ μ½ μ¬ν
νμ μμ μ΄μ’ 컨ν μ΄λ ν¨ν΄μ μμ νμ μ μμλ₯Ό μ μ₯νκ³ κ²μν μ μμ§λ§, μ μ½ μ¬νμ΄ μ‘΄μ¬νλ€.
1. μ
μμ μΈ ν΄λΌμ΄μΈνΈ
μ μμ μΌλ‘ Class κ°μ²΄λ₯Ό μ λ€λ¦μ΄ μλ νμ μΌλ‘ λκΈ°λ©΄ λ¬Έμ κ° λ°μν μ μλ€.(μ»΄νμΌ μ λΉκ²μ¬ κ²½κ³ λ°μ)
2. μ€μ²΄ν λΆκ° νμ
μ¬μ© λΆκ°
String
/ String[]
μλ μ μ© κ°λ₯νλ List<String>
κ°μ μ€μ²΄ν λΆκ° νμ
μ Class κ°μ²΄λ₯Ό μ»μ μ μμ΄ λ¬Έλ² μ€λ₯κ° λλ€.
List.class
κ° νμ©λλ€λ©΄, List<Integer>
μ List<String>
μ΄ κ°μ Class κ°μ²΄λ₯Ό 곡μ νκ² λμ΄ κ΅¬λΆν μ μκ² λκΈ° λλ¬Έμ΄λ€.
(μνΌ νμ
ν ν°μ΄λΌλ λ°©λ²μΌλ‘ μ°ν κ°λ₯ νλ νκ³κ° μ‘΄μ¬νλ€.)
νμ μ νμ
ν ν°(bounded type token)
μμμ ꡬνν Favorites
ν΄λμ€λ λΉνμ μ μμΌλμΉ΄λ νμ
μ μ¬μ©νκ³ μκΈ° λλ¬Έμ λͺ¨λ ν΄λμ€λ₯Ό νμ©νλ€.
νΉμ ν΄λμ€λ§ νμ©νκ³ μΆλ€λ©΄ νμ μ νμ
ν ν°μ μ¬μ©νλ©΄ λλ€.(μ΄λ
Έν
μ΄μ
APIμμ νμ μ νμ
ν ν°μ μ¬μ©νκ³ μλ€.)
<T extends Annotation>
λ‘ μ μΈνμ¬ μ΄λ
Έν
μ΄μ
νμ
λ§ νμ©νμ¬ μ¬μ©νκ³ μλ€.
μ΄ λ©μλλ₯Ό κ·Έλλ‘ μ¬μ©νλ©΄ ? extends Annotation
μΌλ‘ νλ³ννκ² λμ΄ λΉκ²μ¬ νλ³νμ νκ² λλ―λ‘ μ»΄νμΌ κ²½κ³ κ° λ°μνλ€.
λ€λ₯Έ λ©μλλ₯Ό μΆκ°μ μΌλ‘ μ¬μ©νλ©΄μ νμ μ νμ
ν ν°μ μμ νκ² μ¬μ©νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
Last updated
Was this helpful?