ITEM 2: Builder Pattern
μμ±μμ μ μ ν©ν 리λ μ νμ 맀κ°λ³μκ° λ§μ λ μ μ ν λμνκΈ° μ΄λ ΅λ€. μ νμ λ§€κ° λ³μκ° λ§μ κ²½μ°μ μ¬μ©νλ μμ±μ ν¨ν΄μ λν΄μ μ΄ν΄ λ³Ό κ²μ΄λ€.
μμ±μ ν¨ν΄ 1. μ μΈ΅μ μμ±μ ν¨ν΄
μ μΈ΅μ μμ±μ ν¨ν΄(telescoping constructor pattern)μ λ€μκ³Ό κ°μ΄ νμ μΈμλ₯Ό λ°λ μμ±μλ₯Ό μ μν ν, μ νμ μΈμλ₯Ό νλμ© μΆκ°ν΄κ°λ©° μ μνλ κ²μ΄λ€.
μμμμλ μΈμκ° 5κ°λΌ κ°λ¨ν΄ λ³΄μΌ μ μμ§λ§, 맀κ°λ³μκ° λ λμ΄λ μλ‘ μ½λλ₯Ό μμ±νκΈ° μ΄λ €μμ§κ³ , κ°λ μ±μ΄ λ¨μ΄μ§κ² λλ€.
μμ±μ ν¨ν΄ 2. JavaBeans Pattern
μλ°λΉμ¦ ν¨ν΄μ 맀κ°λ³μκ° μλ μμ±μλ‘ κ°μ²΄λ₯Ό λ§λ ν setter λ©μλλ₯Ό νΈμΆν΄ μνλ 맀κ°λ³μμ κ°μ μ€μ νλ λ°©μμ΄λ€.
μλ°λΉμ¦ ν¨ν΄μ μ μΈ΅μ μμ±μ ν¨ν΄μ λ¨μ μ 보μν΄ μΈμ€ν΄μ€ μμ±μ΄ μ½κ³ , λ κ°λ μ±μ΄ μ’μμ‘λ€.
νμ§λ§, μλ°λΉμ¦ ν¨ν΄μμλ κ°μ²΄ νλλ₯Ό λ§λλ €λ©΄ λ©μλλ₯Ό μ¬λ¬ κ° νΈμΆν΄μΌνκ³ , κ°μ²΄κ° μμ ν μμ±λκΈ° μ κΉμ§λ μΌκ΄μ±(consistency)μ΄ λ¬΄λμ§ μνμ μκ² λλ€. μΌκ΄μ±μ΄ κΉ¨μ§λ―λ‘ μλ°λΉμ¦ ν¨ν΄μμλ ν΄λμ€λ₯Ό λΆλ³μΌλ‘ λ§λ€ μ μμΌλ©°, μ€λ λ μμ μ±μ μ»μΌλ €λ©΄ κ°λ°μκ° μΆκ° μμ
μ ν΄μ€μΌνλ€. μ΄λ¬ν λ¨μ μ 보μνκΈ° μν΄ freeze
λ©μλλ₯Ό μ¬μ©ν μ μμΌλ, freeze
λ©μλλ₯Ό νμ€ν νΈμΆν΄μ€¬λμ§ μ»΄νμΌλ¬κ° 보μ¦ν λ°©λ²μ΄ μμ΄ λ°νμ μ€λ₯μ μ·¨μ½νλ€.
μμ±μ ν¨ν΄ 3. Builder Pattern
λΉλ ν¨ν΄μ μ μΈ΅μ μμ±μ ν¨ν΄μ μμ μ±κ³Ό μλ°λΉμ¦ ν¨ν΄μ κ°λ μ±μ κ²ΈλΉν μμ±μ ν¨ν΄μ΄λ€.
ν΄λΌμ΄μΈνΈλ νμ 맀κ°λ³μλ§μΌλ‘ μμ±μλ₯Ό νΈμΆν΄ λΉλ κ°μ²΄λ₯Ό μ»κ³ , λΉλ κ°μ²΄κ° μ 곡νλ setter λ©μλλ€λ‘ μνλ μ ν 맀κ°λ³μλ€μ μ€μ ν μ μλ€. λ§μ§λ§μΌλ‘ 맀κ°λ³μκ° μλ build()
λ©μλλ₯Ό νΈμΆν΄ νμν κ°μ²΄λ₯Ό μ»μ μ μλ€. μ΄λ κ² μ°μμ μΌλ‘ λ©μλλ₯Ό νΈμΆνλ λ°©λ²μ fluent API or method chainingμ΄λΌ νλ€.
λΆλ³ : μ΄λ ν λ³κ²½λ νμ©νμ§ μλλ€. λνμ μΌλ‘ String κ°μ²΄λ νλ² λ§λ€μ΄μ§λ©΄ μ λ κ°μ λ°κΏ μ μλ λΆλ³ κ°μ²΄
λΆλ³μ : νλ‘κ·Έλ¨μ΄ μ€νλλ λμ(νΉμ μ ν΄μ§ κΈ°κ°) λ°λμ λ§μ‘±ν΄μΌνλ 쑰건μ λ§νλ€. λ³κ²½μ νμ©ν μ λ μμΌλ, μ£Όμ΄μ§ 쑰건 λ΄μμλ§ νμ©νλ€λ λ»μ΄λ€.
λΆλ³μμ 보μ₯νκΈ° μν΄μλ λΉλλ‘ λΆν° 맀κ°λ³μλ₯Ό 볡μ¬ν ν ν΄λΉ κ°μ²΄ νλλ κ²μ¬ν΄μΌνλ€.(item50) κ²μ¬μ μλͺ»λ μ μ λ°κ²¬νλ©΄ μ΄λ€ 맀κ°λ³μκ° μλͺ»λμλμ§μ λν λ©μΈμ§λ₯Ό λ΄μ IllegalArgumentException
(item75) μ€λ₯ λ°μμ ν΄μ£Όλ©΄λλ€.
κ³μΈ΅μ μΌλ‘ μ€κ³λ ν΄λμ€
λΉλ ν¨ν΄μ κ³μΈ΅μ μΌλ‘ μ€κ³λ ν΄λμ€μ μ¬μ©νκΈ°μ μ’λ€.
μ¬κΈ°μ Allnco.Builder ν΄λμ€λ μ¬κ·μ νμ
νμ μ μ΄μ©νλ μ λ€λ¦ νμ
μ΄λ€. μ¬κΈ°μ μΆκ°μ μΌλ‘ μΆμ λ©μλμΈ self()
λ₯Ό μΆκ°ν΄ νμ ν΄λμ€μμ ν λ³ν νμ§ μκ³ λ method chainingμ ν μ μλ€.
κ°κ°μ νμ ν΄λμ€μ λΉλκ° μ μν build
λ©μλλ ν΄λΉ νμ ν΄λμ€(Naver
, Gmarket
)μ λ°ννλλ‘ λμ΄μλ€. μ΄λ κ² νμ ν΄λμ€μ λ©μλκ° μμ ν΄λμ€κ° μ μν λ¦¬ν΄ νμ
μ΄ μλ, κ·Έ νμ νμ
μ 리ν΄νλ κ²μ Convariant return typing(κ³΅λ³ λ°ν νμ΄ν)μ΄λΌ νλ€. μ΄ κΈ°λ₯μΌλ‘ ν΄λΌμ΄μΈνΈκ° νλ³νμ μ κ²½ μ°μ§ μκ³ λΉλλ₯Ό μ¬μ©ν μ μλ€.
κ²°λ‘
λΉλ ν¨ν΄μ λΉλ νλλ‘ μ¬λ¬ κ°μ²΄λ₯Ό λ§λ€ μ μκ³ , λΉλμ λκΈ°λ 맀κ°λ³μμ λ°λΌ λ€λ₯Έ κ°μ²΄λ₯Ό λ§λ€ μ μμΌλ―λ‘ λ§€μ° μ μ°νλ€.
νμ§λ§ κ°μ²΄λ₯Ό λ§λ€λ €λ©΄, κ·Έμ μμ λΉλλΆν° λ§λ€μ΄μΌνλ€. λν, μ±λ₯μ λ―Όκ°ν μν©μμλ λΉλ μμ± λΉμ©μ΄ λ¬Έμ κ° λ μ μλ€. λν 맀κ°λ³μκ° 4κ° μ΄μμ΄ λμ΄μΌ κ°μ΄μΉλ₯Ό νλ€.
μ¦, μΈμκ° λ§μ μμ±μλ μ μ ν©ν°λ¦¬κ° νμν ν΄λμ€λ₯Ό μ€κ³ν λ, λλΆλΆμ μΈμκ° μ νμ μΈμμΈ μν©μ μ μ©νλ€. λΉλλ μ μΈ΅μ μμ±μλ³΄λ€ κ°κ²°νκ³ , μλ°λΉμ¦λ³΄λ€ ν¨μ¬ μμ νλ€.
Last updated
Was this helpful?