μΊ‘μν(encapsulation)
- κ°μ²΄κ° λ΄λΆμ μΌλ‘ κΈ°λ₯μ μ΄λ»κ² ꡬννλμ§λ₯Ό κ°μΆλ κ²
- λ΄λΆμ κΈ°λ₯ ꡬνμ΄ λ³κ²½λλλΌλ κ·Έ κΈ°λ₯μ μ¬μ©νλ μ½λλ μν₯μ λ°μ§ μμ
- λ΄λΆ ꡬν λ³κ²½μ μ μ°ν¨μ μ€
1. μ μ°¨ μ§ν₯ λ°©μκ³Όμ λΉκ΅
- νμμ μλΉμ€ λ§λ£ λ μ§ μ¬λΆμ λ°λ₯Έ μ²λ¦¬λ₯Ό νλ λ‘μ§
1. μ μ°¨ μ§ν₯ λ°©μ μ½λ
|
|
|
|
-
Member μ expireDate λ₯Ό νμ¬ μκ°κ³Ό λΉκ΅ν΄μ λ§λ£ μ¬λΆλ₯Ό 체ν¬νλ€. κ·Έλ¦¬κ³ μ΄μ λΉμ·ν λ‘μ§μ μ¬λ¬ κ΅°λ°μμ μ°μΌ κ² μ΄λ€.
-
μ΄μμλ μλΉμ€λ μκ°μ΄ μ§λ¨μ λ°λΌ ν¬κΈ°κ° μ»€μ§ κ²μ΄κ³ , μ μ½ μ¬ν λν μκΈΈ κ²μ΄λ€. κ·Έλ¦¬κ³ λ€μκ³Ό κ°μ΄ μ μ± μ΄ λ³κ²½λμλ€κ³ νλ©΄…
μ¬μ± νμμΈ κ²½μ° λ§λ£ κΈ°κ°μ΄ μ§λ¬μ΄λ 30μΌ κ°μ μλΉμ€λ₯Ό μ΄μ© κ°λ₯νκ² μ μ± λ³κ²½
1 2 3 4 5 6 7
long days30 = 1000 * 60 * 60 * 24 * 30; // 30 days if((member.isMale() && member.getExpireDate() != null && member.getExireDate().getTime() < System.currentTimeMillis()) || (!member.isMale() && member.getExpireDate() != null && member.getExireDate().getTime() < System.currentTimeMillis() - days30)) { // λ§λ£ μ μ²λ¦¬ λ‘μ§ }
- λΉμ·ν λ‘μ§μ΄ μ¬λ¬ κ΅°λ°μμ μ°μΌ ν λ, μΌμΌν λ³κ²½ν΄μ€μΌ νλ€.
- κ²λ€κ°, νμ€κ³Ό κ°μ΄ μ μ±
μ΄ μμλ‘ λ³κ²½λλ€λ©΄..?
(γ γ΄γ γ )
-
μ΄ λΆλΆμ What κ³Ό How μ λν΄μλ μ κ·Όν΄λ³Ό μ μλ€κ³ μκ°λλλ°, μ§λμΉκ² How μ€μ¬μ μΌλ‘(νΉμ λ°μ΄ν° μ€μ¬μ μΌλ‘) νκΈ° λλ¬Έμ μ΄λ° λ¬Έμ κ° λ°μν κ²μ΄λ€. κ·Έλ¬λ©΄ μ΄λ²μ κ°μ²΄ μ§ν₯ λ°©μμΌλ‘ λ³κ²½ν΄λ³΄μ.
2. κ°μ²΄ μ§ν₯ λ°©μ μ½λ (μΊ‘μν μ§ν μ½λ)
- μΊ‘μνλ
κΈ°λ₯μ λ΄λΆμ μΌλ‘ μ΄λ»κ² ꡬνλμλμ§ μ¨κΈ°λ
κ²
|
|
|
|
-
λ€λ₯Έ ν΄λμ€μμλ
isExpired()
κ° μ΄λ»κ² ꡬνλμλμ§ μ μ μκ³ , μ νμλ μλ€. κ·Έλ₯ μλ£λμλμ§ μ λμλμ§μ λν κ²°κ³Όλ§ μλ©΄ λλ€. -
μ μ°¨ μ§ν₯ λμ λ§μ°¬κ°μ§λ‘ μ μ± μ΄ λ³κ²½λλ€λ©΄?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
@Getter public class Member { private static final long DAYS30 = 1000 * 60 * 60 * 24 * 30; // 30 days ... private Date expireDate; private boolean male; public boolean isExpired() { // λ§λ£ μ¬λΆ μμ if(male) { return expireDate != null && expireDate.getTime() < System.currentTimeMills(); } return expireDate != null && expireDate.getTime() < System.currentTimeMills() - DAYS30; } }
- λ€μκ³Ό κ°μ΄
isExpired()
λ₯Ό μμ ν΄μ£Όλ©΄ λλ€. - 그리κ³
isExpired()
λ₯Ό μ¬μ©νλ κ³³μ μμ ν΄μ€ νμκ° μλ€. (λ©μλ λ΄λΆκ° λ³κ²½λμμ§, λ©μλ μ΄λ¦μ΄ λ°λκ±°λ νλΌλ―Έν°κ° μκΈ΄ κ²μ μλλκΉ)
- λ€μκ³Ό κ°μ΄
2. μΊ‘μνμ κ²°κ³Ό
- κΈ°λ₯μ μΊ‘μννλ©΄ λ΄λΆ ꡬνμ΄ λ³κ²½λλλΌλ, κΈ°λ₯μ μ¬μ©νλ κ³³μ μν₯μ μ΅μνν μ μλ€.
- λ³κ²½μ μ μ°ν¨μ μ»κ² λμ΄, μ½κ² ꡬνμ λ³κ²½ν μ μκ² λλ€.
3. μΊ‘μνλ₯Ό μν 2κ°μ κ·μΉ
1. Tell, Don't Ask
- λ°μ΄ν°λ₯Ό λ¬Όμ΄λ³΄μ§ μκ³ , κΈ°λ₯μ μ€νν΄ λ¬λΌκ³ λ§νλ κ²
- μ μ°¨ μ§ν₯μμλ λ°μ΄ν°λ₯Ό μ§μ νμΈνμμΌλ (member.expireDate()), μΊ‘μνλ‘ λ³κ²½νμ μμλ κΈ°λ₯ μ€νμ μμ²νλ©΄ λλ€. (member.isExpired())
2. λ°λ―Έν λ₯΄μ λ²μΉ (Law of Demeter)
-
λ©μλμμ μμ±ν κ°μ²΄μ λ©μλλ§ νΈμΆ
-
νλΌλ―Έν°λ‘ λ°μ κ°μ²΄μ λ©μλλ§ νΈμΆ
-
νλλ‘ μ°Έμ‘°νλ κ°μ²΄μ λ©μλλ§ νΈμΆ
1 2 3
member.getExpireDate().getTime() // getExpireDate()κ° λ¦¬ν΄ν Date κ°μ²΄μ // getTime() λ©μλλ₯Ό νΈμΆνκΈ°μ λ°λ―Έν λ₯΄μ λ²μΉ μλ°
-
λ°λ―Έν λ₯΄μ λ²μΉμ μ§ν€μ§ μλ μ νμ μΈ μ¦μ
-
μ°μλ get λ©μλ νΈμΆ
1
value = object.getA().getB().getValue();
-
μμ λ³μμ get νΈμΆμ΄ λ§μ
1 2 3
A a = object.getA(); B b = a.getB(); value = b.getValue();
- λ κ°μ§ μ¦μμ΄ λ³΄μΈλ€λ©΄ λ°λ―Έν λ₯΄μ λ²μΉμ μ΄κΈ°κ³ μμ κ°λ₯μ±μ΄ λκ³ , μΊ‘μνλ₯Ό μ½νμμΌ μ½λμ λ³κ²½μ μ΄λ ΅κ² λ§λλ μμΈμ΄ λλ€.
- λ°λΌμ μ λ μ¦μμ΄ λ³΄μΈλ€λ©΄ νμΈ ν μ κ·Ήμ μΌλ‘ μΊ‘μν νλλ‘ λ Έλ ₯νμ.
-
-
μ°Έκ³ : κ°λ°μκ° λ°λμ μ 볡ν΄μΌν κ°μ²΄ μ§ν₯κ³Ό λμμΈ ν¨ν΄ - μ΅λ²κ·