Item 20. Abstract Class & Interface
μΆμ ν΄λμ€λ³΄λ€λ μΈν°νμ΄μ€λ₯Ό μ°μ νλΌ
Javaμμ μ 곡νλ λ€μ€ ꡬν λ©μ»€λμ¦μ μΈν°νμ΄μ€μ μΆμ ν΄λμ€λ₯Ό ν΅ν΄ μ 곡λλ€. Java 8 μ΄μ μλ μΈν°νμ΄μ€λ ꡬν μ½λλ₯Ό ν¬ν¨ν μ μμμ§λ§, Java 8 μ΄νλΆν°λ μΈν°νμ΄μ€λ λν΄νΈ λ©μλλ₯Ό ν΅ν΄ ꡬν μ½λλ₯Ό ν¬ν¨ν μ μκ² λμλ€. λλ¬Έμ Java 8 μ΄νμμμ λ λ°©μμ ν° μ°¨μ΄λ μλμ κ°λ€.
μΆμ ν΄λμ€: μΆμ ν΄λμ€κ° μ μν νμ μ ꡬνν ν΄λμ€λ λ°λμ μΆμ ν΄λμ€μ νμ ν΄λμ€κ° λμ΄μΌ νλ€.
μΈν°νμ΄μ€: μΈν°νμ΄μ€κ° μ μΈν λ©μλλ₯Ό λͺ¨λ μ μνκ³ κ·Έ μΌλ° κ·μ½μ μ μ§ν€λ©΄ λ€λ₯Έ ν΄λμ€λ₯Ό μμνλ μκ΄μμ΄ κ°μ νμ μΌλ‘ μ·¨κΈλλ€.
νλ§λλ‘ μΈν°νμ΄μ€λ μΆμ ν΄λμ€μ λ¬λ¦¬ λ€μ€ ꡬνμ΄ κ°λ₯νλ€λ μ°¨μ΄κ° μ‘΄μ¬νλ€. (μΆμ ν΄λμ€λ Class cannot extend multiple classes
μλ¬ λ°μ)
λ§μ½ κΈ°μ‘΄ ν΄λμ€μ κΈ°λ₯μ μΆκ°νκΈ° μν΄μ , μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€κ° ν¨μ¬ μ μ½κ² κΈ°λ₯μ μΆκ°ν μ μλ€.
μΈν°νμ΄μ€μ κ°μ
mixin(λ―Ήμ€μΈ) μ μ
** λ―Ήμ€μΈ: ν΄λμ€κ° ꡬνν μ μλ νμ μΌλ‘, λ―Ήμ€μΈμ ꡬνν ν΄λμ€μ μλμ μ£Όλ νμ μΈμλ νΉμ μ νμ νμλ₯Ό νΌν©ν μ μκ² ν΄μ€λ€.
μ νΉμ§ λλ¬Έμ μΈν°νμ΄μ€λ κΈ°μ‘΄μ μ£Όμ κΈ°λ₯μ μ νμ κΈ°λ₯μ μΆκ°ν μ μλ λ―Ήμ€μΈμ μ μνλ μ©λλ‘ μ¬μ©ν μ μλ€.
κ³μΈ΅ ꡬ쑰 μλ νμ
νλ μμν¬ μ μ
κ³μΈ΅ ꡬ쑰λ μλ§μ κ°λ μ ꡬ쑰μ μΌλ‘ μ ννν μ μμ§λ§, νμ€μ κ°λ°μμλ ꡬλΆνκΈ° νλ κ°λ μ΄ λ§λ€. κ³μΈ΅ κ΅¬μ‘°λ‘ λͺ¨λ κ°λ μ ν¬κ΄νκΈ° μν΄μ μ§λμΉκ² λ§κ³ 볡μ‘ν κ΅¬μ‘°κ° μκΈ°κ² λμ΄ μ μ§λ³΄μκ° μ΄λ €μμ§λ€. λλ¬Έμ μΆμ ν΄λμ€μλ λ¬λ¦¬ μΈν°νμ΄μ€λ λ€μ€ ꡬνμ΄ κ°λ₯νκΈ° λλ¬Έμ μ² μ ν κ³μΈ΅ ꡬ쑰 μμ΄ μ μ°νκ² νμ μ μ μν μ μλ€.
μΈν°νμ΄μ€μ λ¨μ
Java 8λΆν° μΈν°νμ΄μ€μ default λ©μλλ₯Ό μ μν μ μκ² λμλ€. μ΄ κΈ°λ₯μΌλ‘ μΈν΄ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ€μ΄ μλ‘μ΄ λ©μλλ₯Ό ꡬννμ§ μμλ λλ€λ μ₯μ μ΄ μκ²Όμ§λ§ μ΄ κΈ°λ₯μ λ¨μ©νλ©΄ μλλ©° μλμ μ¬νλ€μ μΌλν΄μΌ νλ€.
@implSpec
μ ν΅ν λ¬Έμννμ¬ ν΄λΌμ΄μΈνΈμκ² μ 보 μ 곡equals
,hashCode
,toString
λ±μ λ©μλλ default λ©μλλ‘ μ 곡 κΈμ§κ°μ²΄μ κΈ°λ³Έ λμ λ° κ°μ²΄μ μλ³μ±μ μν₯μ μ£Όμ΄, ꡬν ν΄λμ€μμ μ΄λ¬ν λ©μλλ₯Ό μ€λ²λΌμ΄λνμ§ μκ³ κ·Έλλ‘ μ¬μ©ν κ²½μ° μλͺ»λ λμμ μ λ° κ°λ₯
μΈμ€ν΄μ€ νλλ₯Ό κ°μ§ μ μμ
private static
λ©μλλ₯Ό μ μΈνprivate
λ©€λ² μ¬μ© λΆκ°λ₯
λ§μ½ μμ λ¨μ μ΄ κ΅¬ν μ¬νμ μν₯μ μ£Όμ§ μλλ€λ©΄ κ°λ₯ν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ κ²μ΄ μ’μΌλ©°, λ§μ½ ꡬν μ¬νμ μ μ½μ΄ 걸리λ κ²½μ° μλμμ μκ°ν λ°©λ²μ κ³ λ €ν΄λ³Ό μ μλ€.
Skeletal Implementation(μΆμ 골격 ꡬν)
μΈν°νμ΄μ€μ μΆμ ν΄λμ€μ μ₯μ μ λͺ¨λ κ°μ§λ λ°©λ²μΌλ‘ μΈν°νμ΄μ€ + μΆμ 골격 ꡬν ν΄λμ€λ₯Ό ν¨κ» μ 곡νλ λ°©λ²μ΄ μλ€. μ΄λ₯Ό ν νλ¦Ώ λ©μλ ν¨ν΄μ΄λΌκ³ νλ©°, κ°κ°μ μν μ μλμ κ°λ€.
μΈν°νμ΄μ€
νμ μ μ
νμν κ²½μ° λν΄νΈ λ©μλλ μ 곡
μΆμ 골격 ꡬν ν΄λμ€
λλ¨Έμ§ λ©μλλ€μ ꡬν
μ΄λ¬ν μ¬λ‘λ₯Ό JDKμμλ λ§μ΄ λ³Ό μ μλλ°, λνμ μΌλ‘ AbstractList
μ΄ μλ€.
equals
μ hashCode
λ₯Ό List
μΈν°νμ΄μ€μ μΌλ° κ·μ½μ μ§μΌμ μ 곡νμκ³ , λλ¨Έμ§ λ©μλλ€μ νμ ν΄λμ€μμ μ€λ²λΌμ΄λνλλ‘ μ λνμ¬ κ΅¬νμ κ°μ νμλ€.
κ²°κ³Όμ μΌλ‘ μΆμ ν΄λμ€μ²λΌ ꡬνμ λμμ£Όλ λμμ, λ€μ€ ꡬνμ΄ κ°λ₯ν μΈν°νμ΄μ€μ μ₯μ λ λͺ¨λ κ°μ§κ² λλ€.
Last updated
Was this helpful?