Item 31. Wildcard Type
νμ μ μμΌλμΉ΄λλ₯Ό μ¬μ©ν΄ API μ μ°μ±μ λμ΄λΌ
item 28μμ μΈκΈνλ― λ§€κ°λ³μν νμ
μ λΆκ³΅λ³(invariant)μΈ λΆλΆμ λν΄ μλ¬Έμ μ κ°μ§ μ μλ€.
List<String>
μ List<Object>
μ νμ νμ
μ΄ μλλ°, List<String>
μ List<Object>
κ° νλ μΌμ μ λλ‘ μνν μ μκΈ° λλ¬Έμ 리μ€μ½ν μΉν μμΉμ λ°λ₯΄λ©΄ λΆκ³΅λ³μΈ κ²μ΄ νλΉνλ€.
νμ§λ§ μ΄λλ‘ μ¬μ©νκΈ°μ λΆνΈν μ μ΄ λ§μ 맀κ°λ³μν νμ μ μ μ°νκ² μ¬μ©ν μ μλλ‘ λμμ£Όλ λ°©λ²μ΄ μλλ°, λ°λ‘ νμ μ μμΌλμΉ΄λ νμ (bounded wildcard type)μ μ¬μ©νλ κ²μ΄λ€.
Integerλ Numberμ νμ νμ μ΄λ λ Όλ¦¬μ μΌλ‘ μ λμν κ² κ°μ§λ§, μ λ€λ¦μ λΆκ³΅λ³ νΉμ±μΌλ‘ μΈν΄ μ»΄νμΌ μλ¬κ° λ°μνλ€. ν΄κ²°μ± μΌλ‘λ μμ μμ΄ν λ€μμ μΈκΈνλ―μ΄ νμ μ μμΌλμΉ΄λ νμ μ μ¬μ©νλ κ²μ΄λ€.
Iterable<? extends E>
Eμ νμ νμ μ λͺ¨λ ν¬ν¨νλ Iterable νμ μ 맀κ°λ³μλ‘ λ°μ μ μκ² λμ΄, Numberμ νμ νμ μΈ Integerλ₯Ό ν¬ν¨νλ Iterable νμ μ 맀κ°λ³μλ‘ λ°μ μ μκ² λμλ€.
Collection<? super E>
Eμ μμ νμ μ λͺ¨λ ν¬ν¨νλ Collection νμ μ 맀κ°λ³μλ‘ λ°μ μ μκ² λμ΄, Numberμ μμ νμ μΈ Objectλ₯Ό ν¬ν¨νλ Collection νμ μ 맀κ°λ³μλ‘ λ°μ μ μκ² λμλ€.
μ΄μ²λΌ νμ μ μμΌλμΉ΄λ νμ μ μ¬μ©νλ©΄ 맀κ°λ³μν νμ μ΄ λΆκ³΅λ³μ΄λΌλ μ μ°νκ² μ¬μ©ν μ μκ² λλ€.
PECS(Producer-Extends, Consumer-Super)
νμ μ μμΌλμΉ΄λ νμ
μ μ¬μ©νλ©΄ 맀κ°λ³μν νμ
μ΄ λΆκ³΅λ³μ΄λΌλ μ μ°νκ² μ¬μ©ν μ μκ² λμμ§λ§, μ΄λ₯Ό μ¬μ©ν λ μ£Όμν μ μ΄ μλ€.
λ°λ‘ μμ°μ(producer)μ μλΉμ(consumer) μν μ λ°λΌ extends
μ super
λ₯Ό μ μ ν μ¬μ©ν΄μΌ νλ€λ κ²μ΄λ©°, κ·Έ μμΉμ λ€μκ³Ό κ°λ€.
맀κ°λ³μν νμ Tκ° μμ°μμΈ κ²½μ°:
<? extends T>
맀κ°λ³μν νμ Tκ° μλΉμμΈ κ²½μ°:
<? super T>
맀κ°λ³μν νμ Tκ° μμ°μμ μλΉμμΈ κ²½μ°:
T
λ°ν νμ : νμ μ μμΌλμΉ΄λ νμ μ μ© X, ν΄λΌμ΄μΈνΈ μ½λμ μμΌλμΉ΄λ νμ μ΄ μ νλκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈ μ½λκ° λ 볡μ‘ν΄μ§
μμ μΈκΈν Stack μμ μμλ μμ°μ(pushAll
)μ μλΉμ(popAll
) μν μ λ°λΌ extends
μ super
λ₯Ό μ¬μ©νλ€.
μ λ μν©μ΄ μλ, μ
λ ₯ 맀κ°λ³μκ° μμ°μμ μλΉμ μν μ λμμ ν΄μΌ νλ μν©μμ μμΌλμΉ΄λ νμ
μ μ°μ§ μλ κ²μ΄ μ’λ€.
μ 곡μμ item 30μμ μ΄ν΄λ³΄μλ Collections.max
λ©μλμλ μ΄λ―Έ μ μ©λμ΄ μμμ μ μ μλ€.
Collection<? extends T> coll
: μ λ ₯ 맀κ°λ³μμμ μμ°μ μν μ νλ―λ‘extends
λ₯Ό μ¬μ©Comparable<? super T>
: μ λ ₯ 맀κ°λ³μλ₯Ό μλΉνλ©΄μcompareTo
λ©μλλ₯Ό νΈμΆνλ―λ‘super
λ₯Ό μ¬μ©
νμ
맀κ°λ³μ vs μμΌλμΉ΄λ
νμ 맀κ°λ³μμ μμΌλμΉ΄λλ νμ λ€νμ±μ μμ΄ κ³΅ν΅λλ λΆλΆμ΄ μμ΄ λ μ€ νλλ₯Ό μ νν΄ μ¬μ©ν μ μλ κ²½μ°κ° μλ€.
μ μ²λΌ λ©μλ μ μΈμ νμ 맀κ°λ³μκ° ν λ²λ§ λμ€λ κ²½μ°μ μμΌλμΉ΄λλ‘ λ체νλ κ²μ΄ μ’μ λ°©λ²μ΄ λ μ μλ€. public APIλΌλ©΄ λ λ²μ§Έ λ©μλκ° μ΄λ€ νμ μ Listλ λ°μ μ μκΈ° λλ¬Έμ λ μ μ°νκ² μ¬μ©ν μ μκΈ° λλ¬Έμ΄λ€.
μ΄λ₯Ό ꡬννκΈ° μν΄ μΆκ°μ μΈ helper λ©μλλ₯Ό ꡬνν΄μΌ νλ€λ λ¨μ μ΄ μμ§λ§, ν΄λΌμ΄μΈνΈλ μ΄λ₯Ό μ νμκ° μμΌλ―λ‘ λ¬Έμ κ° λμ§ μλλ€.
Last updated
Was this helpful?