DevLog 😢

[객체지ν–₯μ˜μ‚¬μ‹€κ³Όμ˜€ν•΄] 04 - μ—­ν• , μ±…μž„, ν˜‘λ ₯ λ³Έλ¬Έ

πŸ“–/객체지ν–₯의 사싀과 μ˜€ν•΄

[객체지ν–₯μ˜μ‚¬μ‹€κ³Όμ˜€ν•΄] 04 - μ—­ν• , μ±…μž„, ν˜‘λ ₯

dolmeng2 2023. 5. 1. 22:45

레벨 2 λλ‚˜κΈ° μ „μ—λŠ”... λ‹€ 읽어야지... γ…Ž


 

βœ”οΈ μ—­ν• , μ±…μž„, ν˜‘λ ₯

(κΈ°μ–΅μ—μ„œ μžŠν˜€μ‘Œκ² μ§€λ§Œ) 1μž₯μ—μ„œ μ–ΈκΈ‰ν•˜μ˜€λ˜ 예제λ₯Ό λ‹€μ‹œ κ°€μ Έμ™€λ³΄μž.

μ†λ‹˜λƒ₯이 μΉ΄νŽ˜μ—μ„œ 컀피λ₯Ό μ£Όλ¬Έν•˜κΈ°κΉŒμ§€ λ‹€μŒκ³Ό 같은 μš”μ²­κ³Ό 응닡이 이루어진닀.

1. μ†λ‹˜λƒ₯은 μ•Œλ°”λƒ₯μ—κ²Œ 컀피λ₯Ό μš”μ²­ν•œλ‹€.
2. μ•Œλ°”λƒ₯은 μ…°ν”„λƒ₯μ—κ²Œ 컀피λ₯Ό λ§Œλ“€ 것을 μš”μ²­ν•œλ‹€.
3. μš”μ²­μ„ 받은 μ…°ν”„λƒ₯은 컀피λ₯Ό λ§Œλ“€κΈ° μ‹œμž‘ν•˜λ©΄μ„œ μ‘λ‹΅ν•œλ‹€. μ΄λŠ” μ†λ‹˜λƒ₯의 컀피 주문에 λŒ€ν•œ 응닡이기도 ν•˜λ‹€.
4. λ§Œλ“  컀피λ₯Ό μ•Œλ°”λƒ₯이 건넀받아 μ†λ‹˜λƒ₯μ—κ²Œ μ‘λ‹΅ν•œλ‹€.

μ—¬κΈ°μ„œ μ…°ν”„λƒ₯이 컀피λ₯Ό λ§Œλ“€λΌλŠ” μš”μ²­μ„ 받을 수 μžˆλŠ” μ΄μœ κ°€ λ¬΄μ—‡μ΄μ—ˆμ„κΉŒ?

μ…°ν”„λƒ₯은 λ°”λ¦¬μŠ€νƒ€ 자격증이 있기 λ•Œλ¬Έμ— 컀피λ₯Ό λ§Œλ“€λΌλŠ” μš”μ²­μ— λŒ€ν•΄ μ ν•©ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆμ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

객체지ν–₯ μ„Έκ³„μ—μ„œ μ–΄λ–€ 객체가 μ–΄λ–€ μš”μ²­μ— λŒ€λ‹΅ν•  수 μžˆκ±°λ‚˜ μ μ ˆν•œ 행동을 ν•  μ˜λ¬΄κ°€ μžˆλŠ” 경우, ν•΄λ‹Ή 객체가 μ±…μž„μ„ 가진닀고 λ§ν•œλ‹€.

μ•Œλ°”λƒ₯은 μ…°ν”„λƒ₯μ—κ²Œ 컀피 생성에 λŒ€ν•΄ 전달할 μ±…μž„μ„, μ…°ν”„λƒ₯은 컀피λ₯Ό μ œμž‘ν•  μ±…μž„μ΄ μžˆλŠ” 것이닀.

 

🌱 μ±…μž„μ€, 객체가 μ•Œμ•„μ•Ό ν•˜λŠ” 정보와 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” ν–‰μœ„μ— λŒ€ν•΄ 개랡적으둜 μ„œμˆ ν•œ λ¬Έμž₯이닀.

😻 μ†λ‹˜λƒ₯

μ•Œλ°”λƒ₯이 주문을 λ°›λŠ”λ‹€λŠ” 것을 μ•Œκ³  μžˆλ‹€. (μ•„λŠ” 것)

μ•Œλ°”λƒ₯μ—κ²Œ 컀피 μ œμž‘μ„ μ‹œν‚¨λ‹€. (ν•˜λŠ” 것)

 

😿 μ•Œλ°”λƒ₯

μ…°ν”„λƒ₯이 λ°”λ¦¬μŠ€νƒ€ μžκ²©μ¦μ„ 가지고 μžˆμ–΄ 컀피λ₯Ό λ§Œλ“€ 수 μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆλ‹€. (μ•„λŠ” 것)

μ…°ν”„λƒ₯μ—κ²Œ 컀피 μ œμž‘μ„ μ‹œν‚¨λ‹€. (ν•˜λŠ” 것)

 

🐱 μ…°ν”„λƒ₯

μžμ‹ μ€ λ°”λ¦¬μŠ€νƒ€ μžκ²©μ¦μ„ 가지고 μžˆμ–΄, 컀피λ₯Ό λ§Œλ“œλŠ” 방법을 μ•ˆλ‹€. (μ•„λŠ” 것)

컀피λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. (ν•˜λŠ” 것)

 

🌱 객체가 μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ˜ 집합은, 객체가 ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” 역할을 μ•”μ‹œν•œλ‹€.

μ•Œλ°”λƒ₯이 μ…°ν”„λƒ₯μ—κ²Œ 컀피 μ œμž‘μ— λŒ€ν•΄ μš”μ²­ν•˜μ˜€λ‹€. ‘컀피 μ£Όλ¬Έ’μ΄λΌλŠ” ν˜‘λ ₯ μ†μ—μ„œ μ•Œλ°”λƒ₯은 ‘μ•„λ₯΄λ°”μ΄νŠΈμƒ’ 역할을 μˆ˜ν–‰ν•˜λ©°, μ…°ν”„λƒ₯은 ‘λ°”λ¦¬μŠ€νƒ€’의 역할을 μˆ˜ν–‰ν•˜κ³  μžˆλ‹€. 근데 이것이 μ€‘μš”ν• κΉŒ? μ•Œλ°”λƒ₯을 μ•„λ₯΄λ°”μ΄νŠΈμƒ, μ…°ν”„λƒ₯을 λ°”λ¦¬μŠ€νƒ€λΌκ³  λΆˆλŸ¬μ„œ 상황을 λ³΅μž‘ν•˜κ²Œ λ§Œλ“œλŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒ?

 

μ΄λŠ”, 역할이 μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©°, μœ μ—°ν•œ 객체지ν–₯ 섀계λ₯Ό λ‚³κΈ° λ•Œλ¬Έμ΄λ‹€.

λ§Œμ•½, 고양이 μΉ΄νŽ˜κ°€ 멍멍이 카페둜 λ³€ν™”ν•˜μ˜€λ‹€κ³  μƒκ°ν•΄λ³΄μž.

μ†λ‹˜λƒ₯ λŒ€μ‹  μ†λ‹˜λ©, μ•Œλ°”λƒ₯ λŒ€μ‹  μ•Œλ°”λ©, μ…°ν”„λƒ₯ λŒ€μ‹ μ— μ…°ν”„λ©μœΌλ‘œ λ³€ν™”ν•  것이닀.

 

객체가 λ³€ν™”ν•˜λ”λΌλ„ ν–‰μœ„κ°€ λ³€ν™”ν• κΉŒ? 아닐 것이닀.

μ†λ‹˜λ©μ€ μ•Œλ°”λ©μ—κ²Œ 컀피λ₯Ό μ£Όλ¬Έν•  것이고, μ•Œλ°”λ©μ€ μ…°ν”„λ©μ—κ²Œ 컀피 μ œμž‘μ„ μš”μ²­ν•  것이고, 셰프멍은 컀피 μ œμž‘μ„ 진행할 것이닀.

λ™μΌν•œ ν–‰μœ„λ₯Ό ν•˜λŠ”λ° μ΄λŸ¬ν•œ 객체의 ν˜‘λ ₯을 λ³„λ„λ‘œ 관리해야 ν• κΉŒ?

그럴 ν•„μš” 없이, 역할을 μ‚¬μš©ν•˜μ—¬ 각각의 ν˜‘λ ₯을 ν•˜λ‚˜μ˜ ν˜‘λ ₯으둜 μΆ”μƒν™”ν•˜λ©΄ λœλ‹€.

 

역할은 ν˜‘λ ₯ λ‚΄μ—μ„œ λ‹€λ₯Έ 객체둜 λŒ€μ²΄ν•  수 μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

이 말은 곧, λ‹€λ₯Έ 객체둜 λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν˜‘λŸ­ μ•ˆμ—μ„œ μ–΄λ– ν•œ μ—­ν• λ‘œμ„œ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  μ±…μž„μ„ λ™μΌν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것이닀.

μ†λ‹˜ μžλ¦¬μ—λŠ” μ†λ‹˜λƒ₯, μ†λ‹˜λ©, μ†λ‹˜μ§Ή 등이 λ“€μ–΄κ°ˆ 수 있고, μ•Œλ°” μžλ¦¬μ—λŠ” μ•Œλ°”λƒ₯, μ•Œλ°”λ©, μ•Œλ°”μ§Ή λ“± ν–‰μœ„λ₯Ό λŒ€μ²΄ν•  수 μžˆλŠ” 객체가 λ“€μ–΄κ°ˆ 수 μžˆλ‹€. κ²°κ΅­, λ™μΌν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것은 ν•΄λ‹Ή 객체듀이 ν˜‘λ ₯ λ‚΄μ—μ„œ λ™μΌν•œ μ±…μž„μ˜ 집합을 μˆ˜ν–‰ν•  수 μžˆμŒμ„ μ˜λ―Έν•˜λ©°, λ™μΌν•œ 역할을 μˆ˜ν–‰ν•˜λŠ” 객체듀은 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 μžˆλ‹€.

 

🌱 μ—­ν• μ˜ λŒ€μ²΄ κ°€λŠ₯성은 ν–‰μœ„ ν˜Έν™˜μ„±μ„ μ˜λ―Έν•˜λ©°, ν–‰μœ„ ν˜Έν™˜μ„±μ€ λ™μΌν•œ μ±…μž„μ˜ μˆ˜ν–‰μ„ μ˜λ―Έν•œλ‹€.

μ•Œλ°”λƒ₯은 λ‹¨μˆœνžˆ 컀피 주문만 λ°›μ§€λŠ” μ•ŠλŠ”λ‹€. 카페λ₯Ό λ²—μ–΄λ‚˜λ©΄ μ•Œλ°”λƒ₯은 고양이 κ°€μ‘±μ˜ μΌμ›μœΌλ‘œμ„œμ˜ μ±…μž„μ΄ μžˆμ„ 것이닀.

즉, 역할이 μ•”μ‹œν•˜λŠ” μ±…μž„λ³΄λ‹€ κ°μ²΄λŠ” 더 λ§Žμ€ μ±…μž„μ„ κ°€μ§ˆ 수 있으며, 객체의 νƒ€μž…κ³Ό μ—­ν•  μ‚¬μ΄μ—λŠ” μΌλ°˜ν™” - νŠΉμˆ˜ν™” 관계가 μ„±λ¦½ν•˜κ²Œ λœλ‹€.

 


 

βœ”οΈ μ˜¬λ°”λ₯Έ 객체λ₯Ό μ„€κ³„ν•˜κΈ°

ν˜‘λ ₯을 μ„€κ³„ν•˜λŠ” 것은, 섀계에 μ°Έμ—¬ν•˜λŠ” 객체듀이 주고받을 μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름을 κ²°μ •ν•˜λŠ” 것이닀.

μ—¬κΈ°μ„œ κ²°μ •λœ μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름은, 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰λ  μ±…μž„μ΄ λœλ‹€.

κ²°κ΅­ κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜κ³  λ‚˜λ©΄, μ±…μž„μ€ 객체가 외뢀에 μ œκ³΅ν•˜κ²Œ 될 행동이 λœλ‹€.

 

μ±…μž„κ³Ό 행동을 κ²°μ •ν•˜κ³ , 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ 데이터λ₯Ό κ³ λ―Όν•΄μ•Ό ν•œλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν΄λž˜μŠ€μ™€ λ°μ΄ν„°λŠ” ν˜‘λ ₯κ³Ό μ±…μž„μ΄ κ²°μ •λœ 후에 생성할 수 μžˆλŠ” 것이며, 'ν˜‘λ ₯' 관계λ₯Ό 잘 λ”°μ Έ 객체λ₯Ό μƒμ„±ν•˜κ³ , ν˜‘λ ₯ 관계에 ν•„μš”ν•œ μ±…μž„μ„ κ΅¬μ„±ν•˜μ—¬ μ±…μž„ 자체λ₯Ό κ°μ²΄μ—κ²Œ ν• λ‹Ήν•΄μ•Ό μ˜¬λ°”λ₯Έ 객체λ₯Ό μ„€κ³„ν–ˆλ‹€κ³  말할 수 μžˆλŠ” 것이닀.

 

κ·Έλ ‡λ‹€λ©΄, 객체지ν–₯ 섀계 κΈ°λ²•μ—λŠ” μ–΄λ–€ 것이 μžˆμ„κΉŒ?

 

 

🌱 RDD (μ±…μž„ 주도 섀계)

: ν˜‘λ ₯에 ν•„μš”ν•œ μ±…μž„μ„ μ‹λ³„ν•˜κ³ , μ ν•©ν•œ κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” 방식.

“μ˜¬λ°”λ₯Έ μ±…μž„μ„ μ˜¬λ°”λ₯Έ κ°μ²΄μ—κ²Œ ν• λ‹Ήν•˜λŠ” 것”

 

κΈ°λŠ₯ 자체λ₯Ό μž‘μ€ 규λͺ¨μ˜ μ±…μž„μœΌλ‘œ λΆ„ν• ν•˜κ³ , 각 μ±…μž„μ€ μ±…μž„μ„ μˆ˜ν–‰ν•  κ°μ²΄μ—κ²Œ ν• λ‹Ήν•˜λŠ” 것이닀. 

μ΄λ•Œ, 슀슀둜 μ²˜λ¦¬ν•  수 μ—†λŠ” μ •λ³΄λŠ” λ‹€λ₯Έ κ°μ²΄μ—κ²Œ μš”μ²­ν•˜μ—¬ μ‘λ‹΅λ°›μ•„μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

RDDμ—μ„œλŠ” 객체의 μ±…μž„κ³Ό μƒν˜Έμž‘μš©μ— 집쀑할 수 있으며, 객체의 μ—­ν• , μ±…μž„, ν˜‘λ ₯을 κ³ μ•ˆν•˜κΈ° μœ„ν•œ 방법과 절차λ₯Ό μ œμ‹œν•˜κ²Œ λœλ‹€.

 

 

🌱 λ””μžμΈ νŒ¨ν„΄

: RDD의 κ²°κ³Όλ₯Ό ν‘œν˜„ν•˜λŠ” 것.

ν•΄κ²°ν•˜λ €λŠ” λ¬Έμ œμ— λŒ€ν•΄ μ„œμˆ ν•˜κ³ , ν•΄λ‹Ή νŒ¨ν„΄μ„ μ μš©ν•  수 μžˆλŠ” 상황과 μ—†λŠ” 상황에 λŒ€ν•΄ ν•¨κ»˜ μ„€λͺ…ν•œλ‹€.

νŠΉμ • μƒν™©μ—μ„œ μ–΄λ– ν•œ 섀계가 더 νš¨κ³Όμ μΈμ§€μ— λŒ€ν•΄ 따지고, ν•΄λ‹Ή 섀계λ₯Ό μ μš©ν•˜λŠ” 것이닀.

 

 

🌱 TDD (ν…ŒμŠ€νŠΈ 주도 개발)

ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³ , λ¦¬νŒ©ν„°λ§μ„ 톡해 쀑볡을 μ œκ±°ν•˜λŠ” 것이닀.

ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ•„λ‹Œ, μ±…μž„μ„ μˆ˜ν–‰ν•  κ°μ²΄λ‚˜ ν΄λΌμ΄μ–ΈνŠΈκ°€ κΈ°λŒ€ν•˜λŠ” 객체의 역할이, λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  λ•Œ μ–΄λ–€ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ³ , κ·Έ κ³Όμ •μ—μ„œ μ–΄λ–€ 객체와 ν˜‘λ ₯ν•  것인지에 λŒ€ν•œ κΈ°λŒ€λ₯Ό μ½”λ“œμ˜ ν˜•νƒœλ‘œ μž‘μ„±ν•˜λŠ” 것이닀. 

Comments