λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μŠ€ν„°λ””/였브젝트

[였브젝트] 2μž₯ '객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°'

by moon101 2022. 10. 21.

2μž₯은 μ˜ν™” 예맀 μ‹œμŠ€ν…œμ„ 톡해 객체지ν–₯으둜 μž‘μ„±λœ μ½”λ“œλ₯Ό μ„€λͺ…ν•΄ μ€€λ‹€. μ˜ν™”μ˜ˆλ§€ μ‹œμŠ€ν…œμ€ λ‹€μŒ μž₯에도 계속 μ‚¬μš©λ˜λŠ” 도메인이라 μ΅œλŒ€ν•œ μ΄ν•΄ν•˜λ €κ³  λ…Έλ ₯ν–ˆμ§€λ§Œ 객체지ν–₯에 λŒ€ν•œ κ°œλ…μ΄ λ„ˆλ¬΄ 많이 λ‚˜μ™€μ„œ μ–΄λ €μ› λ‹€. 

 

혼자 μ½μ—ˆμœΌλ©΄ λŒ€μΆ© 읽고 λλ‚΄κ±°λ‚˜ ν¬κΈ°ν–ˆμ„ν…λ° μŠ€ν„°λ””λ‘œ ν•˜λ‹ˆκΉŒ 동기뢀여(.... λ˜λŠ” 뢀담감?)κ°€ λΌμ„œ 2μž₯만 μ΅œμ†Œ 2~3λ²ˆμ€ 읽은 것 κ°™λ‹€. 

 

 

 

그럼 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 무엇인가?

 

software developmentλŠ” 항상 λ³€ν•œλ‹€. 그리고 이 사싀은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€. 개발자인 μš°λ¦¬κ°€ μ›ν•˜λŠ” 것은 변경에 μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆλŠ” μ½”λ“œ(p.35)이고 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν˜‘λ ₯ν•˜λŠ” κ°μ²΄μ‚¬μ΄μ˜ μ˜μ‘΄μ„±μ„ μ μ ˆν•˜κ²Œ 관리할 수 μžˆλŠ” λ‹€μ–‘ν•œ 방법을 μ œκ³΅ν•œλ‹€. 2μž₯μ—μ„œλŠ” κ·Έ λ°©λ²•μœΌλ‘œ 상속과 λ‹€ν˜•μ„±, 좔상화와 μœ μ—°μ„±μ— λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. 

 

상속을 톡해 μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜λŠ” λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€λ₯Ό 물렀받을 수 μžˆλ‹€. 그리고 μΈν„°νŽ˜μ΄μŠ€λŠ” 객체가 μ΄ν•΄ν• μˆ˜ μžˆλŠ” λ©”μ‹œμ§€μ˜ λͺ©λ‘μ„ μ •μ˜ν•œλ‹€. λ”°λΌμ„œ λΆ€λͺ¨μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 물렀받은 μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μˆ˜μ‹ ν•œ λͺ¨λ“  λ©”μ‹œμ§€λ₯Ό 이해할 수 μžˆλ‹€. 

 

객체 κ°„μ˜ ν˜‘λ ₯은 메세지λ₯Ό ν†΅ν•΄μ„œ 이루어지고 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œ κ°μ²΄λŠ” 자율적으둜 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  방법을 κ²°μ •ν•˜λŠ”λ° 이 방법을 λ©”μ„œλ“œλΌκ³  λΆ€λ₯Έλ‹€. λ‹€ν˜•μ„±μ€ 메세지λ₯Ό μˆ˜μ‹ ν•œ 객체의 ν΄λž˜μŠ€μ— 따라 μ‹€μ œ μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œκ°€ λ‹¬λΌμ§€λŠ” 것을 λ§ν•œλ‹€.  

 

좔상 ν΄λž˜μŠ€λŠ” κ΅¬ν˜„μ˜ 일뢀λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ μ •μ˜ν•  수 있고, μΈν„°νŽ˜μ΄μŠ€λŠ” μžμ‹ ν΄λž˜μŠ€κ°€ 전체λ₯Ό κ²°μ •ν•œλ‹€. 

μΆ”μƒν™”μ˜ μž₯점은 1. μš”κ΅¬μ‚¬ν•­μ˜ 정책을 높은 μˆ˜μ€€μ—μ„œ μ„œμˆ ν•  수 있고, 2. 섀계가 μœ μ—°ν•΄μ§„λ‹€(p.65).

 

μ½”λ“œλ₯Ό μž¬μ‚¬μš© ν•˜λŠ” κ²½μš°μ—λŠ” μƒμ†λ³΄λ‹€λŠ” 합성을 μ‚¬μš©ν•˜λŠ” 것이 더 λ‚«λ‹€. μ΄μœ λŠ” 상속이 κ°€μ§€λŠ” 2가지 단점 (1. μΊ‘μŠν™” μœ„λ°˜, 2. μœ μ—°ν•˜μ§€ λͺ»ν•œ 섀계)λ₯Ό ν•΄κ²°ν•΄ μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€. 

 

 

 

μΆ”κ°€μ μœΌλ‘œ κ³΅λΆ€ν•œ λ‚΄μš©:

ν•„λ“œ μ ‘κ·Όμ œν•œμž

ꡬ뢄 ν•΄λ‹Ή 클래슀 λ‚΄λΆ€ 같은 νŒ¨ν‚€μ§€ λ‚΄ 후손 클래슀 λ‚΄ 전체
+ public O O O O
# protected O O O  
~ default O O    
- private O      

 

Template Method (ν—€λ“œνΌμŠ€νŠΈ λ””μžμΈ νŒ¨ν„΄ 8μž₯ μ°Έμ‘°)

λΆ€λͺ¨ ν΄λž˜μŠ€μ— 기본적인 μ•Œκ³ λ¦¬μ¦˜μ˜ 흐름을 κ΅¬ν˜„ν•˜κ³  쀑간에 ν•„μš”ν•œ 처리λ₯Ό μžμ‹ ν΄λž˜μŠ€μ—κ²Œ μœ„μž„ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄(p.52)

λΆ€λͺ¨ 클래슀의 μ•Œκ³ λ¦¬μ¦˜μ€ final둜 μžμ‹ ν΄λž˜μŠ€κ°€ λ³€κ²½ν•  수 μ—†μœΌλ‚˜ μ•Œκ³ λ¦¬μ¦˜ λ‚΄μ˜ μŠ€ν…μ€ μž¬μ •μ˜ ν•  수 μžˆλ„λ‘ 함.

였브젝트 μ±…μ—μ„œλŠ” final을 μ‚¬μš©ν•˜μ§€λŠ” μ•Šμ•˜λ‹€. 그럼 κΌ­ final둜 ν•  ν•„μš”κ°€ μ—†λŠ” 건가?

 

BigDecimal valueOf() Method in Java

public static Money wons(long amount) {
        return new Money(BigDecimal.valueOf(amount));
}

// νŒ¨ν‚€μ§€ λ·°
--> java.math Package
    --> BigDecimal Class
        --> valueOf() Method

μž…λ ₯된 long/double 값을 BigDecimal둜 λ³€ν™˜ν•΄μ£Όλ©΄, λΉ…λ°μ‹œλ©€μ΄ 가지고 μžˆλŠ” λ©”μ†Œλ“œ μ‚¬μš©μ΄ κ°€λŠ₯ν•œλ°, μ±…μ—μ„œλŠ” λΉ…λ°μ‹œλ©€μ˜ add, substract, multiply와 compareTo, toString을 μ‚¬μš©ν•˜μ˜€λ‹€. 

 

λΉ…λ°μ‹œλ©€μ„ μ“΄ μ΄μœ κ°€ μ†Œμˆ˜μ μ˜ 정밀도 λ•Œλ¬ΈμΌκΉŒ?

 

μ°Έκ³ :

BigDecimal에 λŒ€ν•œ 정리가 μž˜λ˜μ–΄ μžˆλŠ” λΈ”λ‘œκ·Έ 

 

 

λŒ“κΈ€