Java/πŸ“• 였브젝트 : μ½”λ“œλ‘œ μ΄ν•΄ν•˜λŠ” 객체지ν–₯ 섀계

[였브젝트 : μ½”λ“œλ‘œ μ΄ν•΄ν•˜λŠ” 객체지ν–₯ 섀계] ν˜‘λ ₯, μ±…μž„, μ—­ν• 

soogoori 2024. 9. 21. 18:10

✨ 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ—μ„œμ˜ 핡심  : μ—­ν• , μ±…μž„, ν˜‘λ ₯

μ•žμ„œ λ§ν–ˆλ˜ 클래슀, 상속, 지연 바인딩이 객체지ν–₯μ—μ„œ μ€‘μš”ν•˜μ§€ μ•Šμ€ 것이 μ•„λ‹ˆμ§€λ§Œ, 이듀은 κ΅¬ν˜„ 츑면에 치우쳐져 μžˆλ‹€. 

 

객체지ν–₯μ—μ„œμ˜ 핡심은 μ—­ν• , μ±…μž„, ν˜‘λ ₯이닀. 

ν˜‘λ ₯을 κ΅¬μ„±ν•˜κΈ° μœ„ν•΄ μ μ ˆν•œ 객체λ₯Ό μ°Ύκ³ , μ μ ˆν•œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” κ³Όμ •μ—μ„œ 객체지ν–₯ μ„€κ³„μ˜ 핡심을 확인할 수 μžˆλ‹€. 

 

ν΄λž˜μŠ€μ™€ 상속과 같은 것은 μ±…μž„κ³Ό ν˜‘λ ₯이 μ–΄λŠ 정도 자리λ₯Ό μž‘μ€ 후에 μ‚¬μš©ν•  수 μžˆλŠ” κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜μΈ 것이닀. 

 

 

 

ν˜‘λ ₯

μ–΄λ–€ 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 무엇인가λ₯Ό μš”μ²­ν•˜λŠ” 것 πŸ‘‰ λ©”μ‹œμ§€ 전솑 (μš”μ²­κ³Ό 응닡)
μžμ‹ μ—κ²Œ ν• λ‹Ήλœ μ±…μž„μ„ μˆ˜ν–‰ν•  λ•Œ ν•„μš”ν•œ 정보λ₯Ό μ•Œμ§€ λͺ»ν•˜κ±°λ‚˜ μ™ΈλΆ€μ˜ 도움이 ν•„μš”ν•  경우 μ μ ˆν•œ κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€ μ „μ†‘ν•΄μ„œ ν˜‘λ ₯ μš”μ²­ 

πŸ‘‰ 객체λ₯Ό κ΅¬μ„±ν•˜λŠ” 행동과 μƒνƒœ λͺ¨λ‘λ₯Ό κ²°μ • = 객체λ₯Ό μ„€κ³„ν•˜λŠ” 데 ν•„μš”ν•œ λ¬Έλ§₯ 제곡

 

public class Movie {

	private String title;
    private Duration runningTime;
    private Money fee;
    private DiscountPolicy discountPolicy;
    
    public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy){
    	this.title = title;
        this.runningTime = runningTime;
        this.fee = fee;
        this.discountPolicy = discountPolicy;
    }
    
    public Money getFee(){
    	return fee;
    }
    
    public Money calculateMovieFee(Screening screening){
    	return fee.minus(discountPolicy.calculateDiscountAmount(screening));
    }
}
  • 예맀 μš”κΈˆ κ³„μ‚°ν•˜κΈ° μœ„ν•΄ Screening이 Movie에 calculateMovieFee λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•¨μœΌλ‘œμ¨ 예맀자 μš”κΈˆ 계산 μš”μ²­ 
    • μš”κΈˆμ„ κ³„μ‚°ν•˜λŠ” 데 ν•„μš”ν•œ κΈ°λ³Έ μš”κΈˆκ³Ό 할인 정책을 κ°€μž₯ 잘 μ•Œκ³  μžˆλŠ” 객체가 Movieμ΄λ―€λ‘œ Movieμ—κ²Œ 처리 μœ„μž„
    • λ§Œμ•½ Screening이 κ³„μ‚°ν•œλ‹€λ©΄ Movie의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μΈ fee와 discountPolicy에 직접 μ ‘κ·Όν•΄μ•Όν•˜λ―€λ‘œ (= μΊ‘μŠν™” 원칙 μœ„λ°˜) Screening은 Movie의 λ‚΄λΆ€ κ΅¬ν˜„μ— 결합됨 πŸ‘‰ 정보와 행동이 Movie와 Screening λ³„λ„μ˜ 객체둜 λ‚˜λ‰¨
    • μžμ‹ μ΄ ν•  수 μ—†λŠ” 일을 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ μœ„μž„ν•˜λ©΄ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” κ°μ²΄λ“€μ˜ 전체적인 μžμœ¨μ„± ν–₯상
✨ 객체λ₯Ό 자율적으둜 λ§Œλ“€κΈ° 

πŸ‘‰ λ‚΄λΆ€ κ΅¬ν˜„ μΊ‘μŠν™” 
πŸ‘‰ 객체 μ‚¬μ΄μ˜ 결합도 λŠμŠ¨ν•˜κ²Œ

 

 

μ±…μž„

ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ 객체가 μˆ˜ν–‰ν•˜λŠ” 행동 및 μœ μ§€ν•΄μ•Ό ν•˜λŠ” 정보 
 
πŸ‘‰ ν˜‘λ ₯ μ•ˆμ—μ„œ κ°μ²΄μ—κ²Œ ν• λ‹Ήν•œ μ±…μž„μ΄ μ™ΈλΆ€μ˜ μΈν„°νŽ˜μ΄μŠ€μ™€ λ‚΄λΆ€μ˜ 속성 κ²°μ • 
πŸ‘‰ κ°μ²΄μ—κ²Œ μ–Όλ§ˆλ‚˜ μ μ ˆν•œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠλƒκ°€ μ„€κ³„μ˜ 전체적인 ν’ˆμ§ˆ κ²°μ • 

 

✳️ ν•˜λŠ” 것 

  • 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 계산을 μˆ˜ν–‰ν•˜λŠ” λ“±μ˜ 슀슀둜 μˆ˜ν–‰
  • λ‹€λ₯Έ 객체의 행동 μ‹œμž‘μ‹œν‚€κΈ° 
  • λ‹€λ₯Έ 객체의 ν™œλ™μ„ μ œμ–΄ν•˜κ³  μ‘°μ ˆν•˜κΈ°

 

✳️ μ•„λŠ” 것

  • 사적인 정보에 λŒ€ν•΄ μ•ŒκΈ°
  • κ΄€λ ¨λœ 객체에 λŒ€ν•΄ μ•ŒκΈ°
  • μžμ‹ μ΄ μœ λ„ν•˜κ±°λ‚˜ 계산할 수 μžˆλŠ” 것에 λŒ€ν•΄ μ•ŒκΈ° 

ex) Screening의 μ±…μž„ = μ˜ν™” 예맀, μƒμ˜ μ˜ν™” νŒŒμ•…  /  Movie의 μ±…μž„ = μš”κΈˆ 계산, 가격과 할인정책 νŒŒμ•…


 βœ΄οΈ μ±…μž„μ„ ν• λ‹Ήν•  λ•Œ κ³ λ €ν•΄μ•Όν•˜λŠ” 두 가지 μš”μ†Œ 

1️⃣ λ©”μ‹œμ§€κ°€ 객체λ₯Ό κ²°μ •

  • κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” 데 ν•„μš”ν•œ λ©”μ‹œμ§€ λ¨Όμ € 식별
  • λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  객체λ₯Ό λ‚˜μ€‘μ— 선택
  • 객체가 μ΅œμ†Œν•œμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§ˆ 수 있게 됨
  • κ°μ²΄λŠ” 좔상적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§ˆ 수 있게 됨 

2️⃣ 행동이 μƒνƒœλ₯Ό κ²°μ •

  • 객체가 ν˜‘λ ₯에 μ ν•©ν•œμ§€λ₯Ό κ²°μ •ν•˜λŠ” 것 = 행동

 

 

μ—­ν• 

객체가 μ–΄λ–€ νŠΉμ •ν•œ ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ˜ 집합

 

ex). Movie κ°μ²΄λŠ” 할인 μš”κΈˆμ„ κ³„μ‚°ν•΄μ•Όν•˜λŠ” μ±…μž„μ„ 가지고 μžˆλ‹€.
ν• μΈμš”κΈˆ 계산은 ν• μΈκΈˆμ•‘κ³Ό ν• μΈμœ¨μ— 따라 κ²°μ •λ˜λŠ”λ°, 이 두 μ’…λ₯˜μ˜ ꡬ체적인 객체λ₯Ό ν¬κ΄„ν•˜λŠ” 좔상적인 역할이 λ°”λ‘œ DiscountPolicy (μΆ”μƒν΄λž˜μŠ€)이닀. 
πŸ‘‰ λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 역할을 기반으둜 두 개의 ν˜‘λ ₯을 ν•˜λ‚˜λ‘œ 톡합 


  • 역할을 κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ 일반적인 방법 = 좔상 클래슀 & μΈν„°νŽ˜μ΄μŠ€
    πŸ‘‰ λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ ν΄λž˜μŠ€λ“€μ„ ν˜‘λ ₯에 μ°Έμ—¬μ‹œν‚¬ 수 있음
    • μΆ”μƒν΄λž˜μŠ€ : 역할을 μˆ˜ν–‰ν•  수 μžˆλŠ” λͺ¨λ“  객체듀이 κ³΅μœ ν•˜λŠ” μƒνƒœμ™€ ν–‰λ™μ˜ κΈ°λ³Έ κ΅¬ν˜„ 쑴재
    • μΈν„°νŽ˜μ΄μŠ€ : κ³΅ν†΅μ˜ κ΅¬ν˜„μ΄ ν•„μš”μ—†κ³  단지 μ±…μž„μ˜ λͺ©λ‘λ§Œ μ •μ˜ 
  • ν˜‘λ ₯에 μ ν•©ν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” λŒ€μƒμ΄ 1개라면 = 객체  /  μ—¬λŸ¬ μ’…λ₯˜λΌλ©΄ = μ—­ν•