ch21 : Generic
λͺ©μ°¨
Generic μ¬μ©νλ μ΄μ ?
λ§μ½ DTOμ λ©€λ²νλλ₯Ό
Object
λ‘ ν κ²½μ°,리ν΄κ°μ
Object
λ‘ λ°μμ μ€μ μ¬μ©μμλ νλ³νμ ν΄μ£Όμ΄μΌνλ€.λ€λ§, μ΄λ μ€μ μ΄λ€ μλ£νμΈμ§ νΌλλ μ μλ€. (
instanceof
λ₯Ό ν΅ν΄ μ§μ if-elseλ¬ΈμΌλ‘ νμ μ μ κ²ν΄μ€ μλ μμ§λ§ λ²κ±°λ‘λ€.)β μ΄λ μ΄ μλ£νμ μ»΄νμΌ μμ μ μ κ²ν μ μλλ‘ ν΄μ£Όλ κ²μ΄
Generic
μ΄λ€!
μμ)
π‘ μ΄λ° μμΌλ‘ νλ³νμ μ§μ ν΄μ£Όμ§ μκ³ , ν΄λΉ μλ£νμ΄ κ·Έλλ‘ λ¦¬ν΄λλ€. μ΄λ λ§μ½ μλ£νμ΄ λ€λ₯΄λ©΄, μ»΄νμΌ μλ¬κ° λ°μνλ€.
μ λ€λ¦ νμ μ΄λ¦ μ νκΈ°
E : μμ (μλ° Collections)
K : ν€
N : μ«μ
T : νμ
V : κ°
S, U, V : κ°κ° 2,3,4 λ²μ§Έ μ μΈλ νμ
Wildcard
<?>
λ§€κ°λ³μλ‘ μ¬λ¬ νμ μ λ°κ³ μΆμ κ²½μ° <?>μ μ¬μ©νλ€.
μ λ€λ¦ ν΄λμ€μ νμ λ§ λ°κΎΌλ€κ³ μ€λ²λ‘λ©ν μλ μκΈ°μ μμΌλμΉ΄λλ₯Ό μ¬μ©ν¨.
κ·Έλ¦¬κ³ ν΄λΉ λ©μλ λ΄μμλ
instanceof
λ₯Ό ν΅ν΄μ νμ μ νμΈνλ©΄ λλ€.μμ) λ©μλμμ λ§€κ°λ³μλ‘ νκ°μ§ νμ λ§ λ°μ μ μλλ‘ λμ΄μλ€.
// μ λ€λ¦ ν΄λμ€ public class WildcardGeneric<W> { W wildcard; public void setWildcard(W wildcard) { this.wildcard = wildcard; } public W getWildcard() { return wildcard; } } // μ λλ¦ κ°μ²΄ μμ± WildcardGeneric<String> tmp = new WildcardGeneric<String>(); wildcardMethod(tmp); // ν¨μ νΈμΆ // ν¨μ-> λ§€κ°λ³μ Stringνμ λ§ λ°μ μ μμ public void wildcardMethod(WildcardGeneric<String> c) { String val = c.getValue(); // ... }
λ¨, <?> μμΌλμΉ΄λλ λ§€κ°λ³μλ‘λ§ μ¬μ©ν κ²! κ°μ²΄ μ μΈ μμλ μ¬μ©ν μλ μμ§λ§, νΉμ νμ μΌλ‘ κ°μ ν λΉν μλ μλ€.
// λ§€κ°λ³μλ‘ μ¬λ¬ νμ μ λ°μ μ μμ public void wildcardMethod(WildcardGeneric<?> c) { Object val = c.getValue(); if(val instanceof String) { // } }
Bounded Wildcard
<? extends λΆλͺ¨ν΄λμ€>
μμΌλμΉ΄λμ νμ λ²μλ₯Ό μ ν μ μλ€.
λ§€κ°λ³μ/리ν΄κ°μμ
<?>
λμ<? extends λΆλͺ¨ν΄λμ€>
μ μ¬μ©νλ©΄, μμλ°μ λΆλͺ¨ν΄λμ€λ§ λ°μ μ μλ€.
public void callWildcardMethod(WildcardGeneric<T extends Car> c) {
Car val = c.getValue();
//...
}
λ¨, μ΄ κ²½μ°μλ λ§€κ°λ³μλ‘ μ¨ λ³μμ κ°μ μΆκ°ν μ μλ€.
μμΌλμΉ΄λλ‘ μ μΈλ λ³μλ νΉμ νμ μΌλ‘ κ°μ΄ ν λΉλ μ μκΈ° λλ¬Έ!
λ§€κ°λ³μλ‘ μ¨ λ³μμ κ°μ μΆκ°νκ³ μΆμΌλ©΄,
λ©μλ μ μΈ μ λ¦¬ν΄ νμ μμ μ λλ¦ν νμ μ μ μΈν΄ μ£Όκ³ , κ·Έ νμ μ λ§€κ° λ³μμμ μ¬μ©νλ©΄ λλ€.
public<T> void callWildcardMethod(WildcardGeneric<T> c, T addValue) { c.setWildcard(addValue); T value = c.getWildcard(); System.out.println(value); }
Last updated