Item 18. Composition
μμλ³΄λ€ μ»΄ν¬μ§μ μ μ¬μ©νλΌ
** μ΄λ² μμ΄ν μμ λ Όνλ λ¬Έμ λ ν΄λμ€κ° μΈν°νμ΄μ€λ₯Ό ꡬννκ±°λ μΈν°νμ΄μ€κ° λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό νμ₯ν λμλ 무κ΄ν λ¬Έμ λ€μ λ€λ£Έ
μμμ μ½λλ₯Ό μ¬μ¬μ©νκΈ° μν΄ μ μ©ν λꡬμ΄μ§λ§, νμ μ΅μ μ΄ μλλ©°, μλͺ» μ¬μ©νκ²λλ©΄ μ€λ₯λ₯Ό λ΄κΈ° μ½κ² λλ€. μλμ κ²½μ°μλ μμμ μ¬μ©νλλΌλ μμ νλ€.
μμ ν΄λμ€μ νμ ν΄λμ€ λͺ¨λ λμΌν νλ‘κ·Έλλ¨Έκ° ν΅μ νλ ν¨ν€μ§ μμμλ§ μ¬μ©
νμ₯ν λͺ©μ μΌλ‘ μ€κ³λμκ³ λ¬Έμνλ μ λμ΄μλ ν΄λμ€λ₯Ό μμνλ κ²½μ°
νμ§λ§ λ°λμ μν©(ν¨ν€μ§ κ²½κ³λ₯Ό λκ±°λ, λ¬Έμνκ° λΆμ‘±νκ±°λ, νμ₯μ κ³ λ €νμ§ μμ ν΄λμ€λ₯Ό μμνλ κ²½μ°)μμλ μμμ μννλ€.
μμμ μνμ±
μμμ νκ² λλ©΄ μμ ν΄λμ€μ ꡬνμ λ°λΌ νμ ν΄λμ€μ λμμ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ κ²°κ΅ μΊ‘μνλ₯Ό μλ°νκ² λλ€. μμ ν΄λμ€ μ€κ³ μ νμ₯μ μΆ©λΆν κ³ λ €νμ§ μκ³ λ¬Έμνλ₯Ό μ ν΄λμ§ μμΌλ©΄ νμ ν΄λμ€λ μμ ν΄λμ€μ λ³κ²½μ μ·¨μ½ν΄μ§κ² λλ€.
λ©μλ μ€λ²λΌμ΄λ©
μλλ HashSetμ μμνμ¬ add / addAllμ μ€λ²λΌμ΄λ©νμμ§λ§ μ λλ‘ λμνμ§ μλ μμμ΄λ€.
μμ μ£Όμμμ λ³Ό μ μλ―μ΄ addAll
λ©μλλ₯Ό νΈμΆνλ©΄μ addCount
κ° 3μ΄ μ¦κ°ν κ²μΌλ‘ κΈ°λνμ§λ§, μ€μ λ‘λ 6μ΄ μ¦κ°νκ² λλ€.
HashSet
μ addAll
λ©μλλ λ΄λΆμ μΌλ‘ add
λ©μλλ₯Ό νΈμΆνκ³ μμ§λ§, νλ‘κ·Έλλ¨Έκ° μ΄λ₯Ό μΈμ§νκΈ° μ½μ§ μκΈ° λλ¬Έμ μμ κ°μ λ¬Έμ κ° λ°μνκ² λλ€.
μΌμμ μΌλ‘ addAll
λ©μλλ₯Ό μ¬μ μνμ¬ μ§μ 컬λ μ
μ μννλ©° add
λ©μλλ₯Ό νΈμΆνλλ‘ μμ νλ©΄ λ¬Έμ λ ν΄κ²°λμ§λ§, λ€λ₯Έ μ€λ₯λ₯Ό λ΄κΈ° μ¬μ΄ μ½λκ° λμ΄λ²λ¦°λ€.
μλ‘μ΄ λ©μλ μΆκ°
μμ λ¬Έμ λ μ€λ²λΌμ΄λ©νλ©΄μ λ°μνλ λ¬Έμ μ΄μ§λ§, μμ ν΄λμ€μ μλ‘μ΄ λ©μλκ° μΆκ°λλ κ²½μ°μλ λ¬Έμ κ° λ°μν μ μλ€. λ§μ½ μλ‘ μΆκ°ν λ©μλκ° μμ ν΄λμ€μ λ€μ λ²μ μμ μλ‘κ² μΆκ°λ λ©μλμ λμΌν μ΄λ¦μ κ°μ§λ€λ©΄, νμ₯ν νμ ν΄λμ€λ μ»΄νμΌμ‘°μ°¨ λμ§ μκ±°λ μ€λ²λΌμ΄λ©μ νκ² λμ΄ μλͺ»λ λμμ νκ² λλ€.
λ¬Έμ λ₯Ό ννΌνλ λ°©λ²
μμμ μ¬μ©νμ§ μκ³ λ μμ ν΄λμ€μ κΈ°λ₯μ μ¬μ¬μ©ν μ μλ λ°©λ²μ΄ μλλ°, λ°λ‘ μ»΄ν¬μ§μ μ΄λ€. μ»΄ν¬μ§μ μ μ¬μ©νλ λ°©λ²μ μλμ κ°λ€.
νμ₯νλ λμ μλ‘μ΄ ν΄λμ€ μμ±
private νλλ‘ κΈ°μ‘΄ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ νλ μΆκ°(= composition)
μλ‘μ΄ ν΄λμ€μ μΈμ€ν΄μ€ λ©μλμμ κΈ°μ‘΄ ν΄λμ€μ λμνλ λ©μλλ₯Ό νΈμΆνμ¬ κ²°κ³Όλ₯Ό λ°ν(= forwarding)
λνΌ ν΄λμ€(wrapper class): κΈ°μ‘΄ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό νλλ‘ κ°κ³ μλ μ ν΄λμ€
μ λ¬ λ©μλ(forwarding method): κΈ°μ‘΄ ν΄λμ€λ₯Ό νΈμΆν΄μ£Όλ μ ν΄λμ€μ λ©μλ
μ ꡬν λ°©λ²μ λ°νμΌλ‘ μ λ¬ ν΄λμ€λ₯Ό λ§λ€μ΄ μλ‘μ΄ InstrumentedHashSet
ν΄λμ€λ₯Ό ꡬννλ©΄ μλμ κ°λ€.
μ μ½λλ Set μΈν°νμ΄μ€λ₯Ό νμ©ν΄μ μ λ¬ ν΄λμ€λ₯Ό λ§λ€μ΄ λ€λ₯Έ Set ꡬν체μλ μ μ©ν μ μλλ‘ μ€κ³νμ¬ λ§€μ° μ μ°νκ² μ€κ³λ μμμ΄λ€. μμ λ°©μμ ꡬ체 ν΄λμ€λ₯Ό κ°κ° μμλ°μ ꡬνν΄μΌ νμ§λ§, μ»΄ν¬μ§μ λ°©μμ μΈν°νμ΄μ€λ₯Ό νμ©νμ¬ κ΅¬ν체μ μκ΄μμ΄ μ¬μ¬μ©ν μ μλ€.
μμμ μ¬μ©ν΄μΌνλ μν©
μλ λ 쑰건μ λ§μ‘±νλ κ²½μ°μλ μμμ μ¬μ©ν΄λ μμ νμ§λ§, κ·Έ μΈμ κ²½μ°μλ μμμ μ¬μ©νμ§ μκ³ μ»΄ν¬μ§μ μ μ¬μ©νλ κ²μ΄ μ’λ€.
λ ν΄λμ€μ κ΄κ³κ° is-a κ΄κ³μΈ κ²½μ° (νμ ν΄λμ€ is a μμ ν΄λμ€)
Bλ Aλ€ λΌλ λ¬Έμ₯μ΄ μ±λ¦½ν΄μΌλ§ νλ€.
μμνλ €λ μμ ν΄λμ€κ° μ²μμ λͺ μ λ 쑰건(λμΌ ν¨ν€μ§, λ¬Έμν, νμ₯μ κ³ λ €ν μ€κ³)μ λ§μ‘±νλ κ²½μ°
μλ° λΌμ΄λΈλ¬λ¦¬μ Stack/Vector, Properties/Hashtable λ±μ μμμ μ¬μ©νμμ§λ§, is-a κ΄κ³κ° μλκΈ° λλ¬Έμ μλͺ»λ μ€κ³λΌκ³ λ³Ό μ μλ€.
Last updated
Was this helpful?