Generic
μ λ€λ¦ (Generic)
μ μ
μ»΄νμΌ νμμ νμ μ 체ν¬ν΄ μ£Όλ κΈ°λ₯
μ λ€λ¦μ μ¬μ©μ λ κ°μ§ μ΄μ μ κ°μ§λ€.
μ§μ ν νμ μ΄μΈμ νμ μ κ°μ§ λ°μ΄ν°κ° ν λΉλλ©΄ μ»΄νμΌ μλ¬λ₯Ό λ°μμν¨λ€. λ°λΌμ,
νμ μμ μ±
μ 보μ₯ν μ μλ€.ex) ListμΌλ‘ μ μΈνλ©΄ String μ΄μΈ κ°μ΄ λ€μ΄κ°λ©΄ μ»΄νμΌ μλ¬κ° λ°μ
μ λ€λ¦μΌλ‘ μ μΈν κ°μ 묡μμ νλ³νμ΄ κ°λ₯νλ€.
List ν΄λΉ νλλ‘λΆν° κΊΌλΈ κ°μ νλ³ν μμ΄λ StringμΌλ‘ κ°μ£Ό
λ΄λΆμ μΌλ‘ μ»΄νμΌλ¬κ° λͺ μμ νλ³νμ΄ νμν κ²½μ° μΆκ°ν΄μ£ΌκΈ° λλ¬Έ
μ¬μ© μ΄μ (λͺ©μ )
μ λ€λ¦ μ΄μ μλ μ΄λ€ μλ£νμΈμ§ νμ λμ§ μμ μ΄λ€ νμ μ κ°μ λ£λ μ»΄νμΌ μλ¬κ° λ°μνμ§ μμκ³ , λ§μ½ μ΄λ₯Ό νΉμ μλ£νμΌλ‘ μ΄μ©νκ³ μ νλ€λ©΄ λͺ μμ μΌλ‘ νλ³νμ ν΄μ€¬μ΄μΌ νλ€.
κ·Έλ¬λ μ΄λ
λ°νμ μλ¬
λ₯Ό λ°μμν¬ κ°λ₯μ±μ λ΄ν¬νλλ°, λ°νμ μλ¬λ μ΅λν μ»΄νμΌ μλ¬λ‘ λ리λ κ²μ΄ μ’λ€. μ»΄νμΌ μλ¬λ νλ‘κ·Έλ¨μ μ€ννμ§ μκ³ λ μ μ νλ κ²μ΄ κ°λ₯ν΄ κ°λ° μ€μ κ°μ§νκ³ μμ ν μ μκΈ° λλ¬Έμ΄λ€. (λν, μμ¦ λλΆλΆ IDEλ μ»΄νμΌνμ§ μκ³ λ μ»΄νμΌ μλ¬λ μλ € μ€)
μ 리νμλ©΄, μ λ€λ¦μ βμλͺ»λ νλ³νμ μν΄ λ°μνλ λ°νμ μλ¬μΈ
ClassCastException
μ μ»΄νμΌ νμμΌλ‘ λμ΄μ€λλ‘ νλ μν μ μνβνλ€. μ΄κ²μ΄ μ λ€λ¦μ μ¬μ©νλ κ°μ₯ ν° μ΄μ (λͺ©μ )μ΄λ€.
μ λ€λ¦ μ μ©
μ λ€λ¦ ν΄λμ€
ν΄λμ€λ₯Ό μμ±ν λ νμ λ³μλ₯Ό λͺ μν κ²
κ°μ²΄λ₯Ό μμ±ν λ νμ λ³μ μ리μ μ€μ νμ μ μ§μ (λμ )ν μ μλ€.
ν΄λμ€λͺ μμ <νμ λ³μ>λ₯Ό λͺ μν¨μΌλ‘μ¨ μ μΈ κ°λ₯νλ©°, ν΄λμ€ λ΄λΆμ
νλ νμ
,νλΌλ―Έν° νμ
,λ°ν νμ
μΌλ‘ μ¬μ©ν μ μλ€.μ λ€λ¦ ν΄λμ€ μ μΈ μ λ€μμ μ μν΄μΌ νλ€.
μ λ€λ¦ ν΄λμ€ λ΄λΆμμλ μ΄λ€ λ³μλ μμ± μμ μμλ νμ λ³μκ° μ€λ©΄ μ λλ€. (λΉμ°ν μμ± μμ μλ νμ μ΄ νμ λΌμΌ ν¨)
static νλ λλ λ©μλμλ νμ λ³μλ₯Ό μ¬μ©ν μ μλ€. (static νλ/λ©μλλ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ μμμ΄λ―λ‘ μΈμ€ν΄μ€λ³λ‘ νμ μ΄ μ§μ λ μ μμ)
μ λ€λ¦ ν΄λμ€μ λνμ μΈ μμλ‘λ Collectionμ List, Set, κ·Έλ¦¬κ³ Map μλ£κ΅¬μ‘° λ±μ΄ μλ€.
ex) ArrayListλ JDK1.5μμ μ λ€λ¦ κΈ°λ₯μ΄ μΆκ°λλ©΄μ λ€μκ³Ό κ°μ΄ ꡬνλμλ€.
μ νλ μ λ€λ¦ ν΄λμ€ (νμ
μ ν)
νμ λ³μλ₯Ό <T extends ν΄λμ€>μΌλ‘ μ€μ νλ©΄ νμ μ§μ μ νΉμ νμ (κ³Ό κ·Έ μμ)λ§ κ°λ₯νκ² νμ μ μ νν μ μλ€.
<T extends μΈν°νμ΄μ€>μ κ²½μ°μλ implementsκ° μλ extendsλ₯Ό μ΄λ€.
β μ΄μ κ°μ΄ νμ μ μ ννλ©΄ ν΄λΉ ν΄λμ€/μΈν°νμ΄μ€μ λ©μλλ₯Ό μ¬μ©ν μ μλ€λ μ₯μ μ΄ μλ€.
ex) λͺ¨λ νμ κ°μ²΄λ₯Ό μ μ₯ν μ μλ
Box
μ κ³ΌμΌ κ°μ²΄λ§ μ μ₯ν μ μλFruitBox
μμΌλμΉ΄λ
<T extends ν΄λμ€λͺ >μ ν΄λμ€μ μ μΈ μμ μ μ¬μ©νλ κ²μ΄κ³ , μμΌλμΉ΄λλ μ΄μ κ°μ λμμ νλ μΈμ€ν΄μ€ μ μΈ μμ μ μ¬μ©νλ κ²μ΄λ€.
μμΌλμΉ΄λλ₯Ό μ΄μ©νλ©΄ νλμ μ°Έμ‘°ν λ³μκ° κ°λ₯ν νμ λ²μ λ΄μμ μ¬λ¬ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
κ·Έλ¬λ μ£Όμν μ μ, μ΄μ¨λ μ°Έμ‘°κ° κ°λ₯ν κ²μ΄ μ¬λ¬κ°μΌ λΏ μ°Έμ‘°(μμ± λ° ν λΉ) μμ μλ λ¨ νλμ νμ μΌλ‘ μ νλμ΄μΌ νλ€λ κ²μ΄λ€.
νμ μ ν ν΄λμ€μ λ§μ°¬κ°μ§λ‘ <? extends List> νλ©΄ μ΄μ¨λ Listλ‘ κ°μ£Όνμ¬ Listμ λ©μλ μ΄μ© κ°λ₯νλ€.
μ¬μ©νλ©΄ ν΄λΉ ν΄λμ€μ κ·Έ μμλ€λ§ ν λΉμ΄ κ°λ₯νλ€. - ν΄λΉ ν΄λμ€λ‘ κ°μ£Όνκ³ μ΄μ©ν μ μμΌλ―λ‘(λ€νμ±) κ°μ₯ λ§μ΄ μ¬μ©λλ€.
μ¬μ©νλ©΄ ν΄λΉ ν΄λμ€μ κ·Έ μ‘°μλ€λ§ ν λΉμ΄ κ°λ₯νλ€.
ex) λμΌν μ°Έμ‘°ν λ³μμ νμ μ νμ λ§μ‘±νλ μ¬λ¬ νμ ν λΉ κ°λ₯
μμΌλμΉ΄λλ λ©μλμ λ§€κ°λ³μ μμμλ μ¬μ© κ°λ₯νλ©°, static λ©μλμμλ μ¬μ©μ΄ κ°λ₯νλ€.
μ λ€λ¦ λ©μλ
λ©μλλ₯Ό μ μν λ νμ λ³μλ₯Ό μ μΈνλ κ²μ΄λ€.
μ λ€λ¦ ν΄λμ€μ κ°μ΄ μ¬μ©ν μλ μλ€.
λ€λ₯Έ νμ λ³μλͺ μ μ¬μ©ν κ²μ κΆμ₯νλ κ°μ λ³μλͺ μ μ¬μ©νλ©΄ μ λ€λ¦ λ©μλμ νμ λ³μκ° λ μ°μ μλλ€.
global variableλ³΄λ€ local variableμ΄ λ μ°μ κΆμ κ°λ κ²κ³Ό μ μ¬
μ λ€λ¦ λ©μλμ μν₯ λ²μλ
ν΄λΉ λ©μλμ νλΌλ―Έν°
λΏμ΄λ€.μ λ€λ¦ λ©μλμμμ νμ μ λλΆλΆ μλ΅μ΄ κ°λ₯νλ€.
static λ©μλμλ μ¬μ©ν μ μλ€. (λ©μλ νΈμΆ μλ§λ€ νμ μ κ²°μ νλ―λ‘)
μ λ€λ¦ λ©μλλ₯Ό μ΄μ©νλ λ°©μ, μμΌλμΉ΄λλ₯Ό μ΄μ©νλ λ°©μμ μλ‘ κ°μ μλ―Έλ‘ μ¬μ©λ μ μμΌλ©°, μ΄ κ²½μ° λ μ€ νλλ₯Ό μ νν΄μ μ¬μ©νλ©΄ λλ€.
ex) μμμ κ³ΌμΌ νμ κ°μ²΄λ₯Ό λ°μ μ£Όμ€λ₯Ό λ§λ€μ΄ λ°ννλ λ©μλ
λλΆλΆ μμΌλμΉ΄λλ₯Ό μ°μ μ μΌλ‘ μ°κ³ , μΈ μ μμ λ λμμΌλ‘ μ λ€λ¦ λ©μλλ₯Ό μ¬μ©νλ€.
Reference
Last updated