[였브젝트 3μž₯] - μ—­ν• , μ±…μž„, ν˜‘λ ₯

2024. 7. 7. 19:05γ†λ„μ„œ

[였브젝트 3μž₯] - μ—­ν• , μ±…μž„, ν˜‘λ ₯

 

 

 ν˜‘λ ₯

 

객체듀이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μƒν˜Έμž‘μš©μ„ "ν˜‘λ ₯"이라고 ν•œλ‹€. 객체가 ν˜‘λ ₯ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” λ‘œμ§μ€ "μ±…μž„"이라고 λΆ€λ₯Έλ‹€. 객체듀이 ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ±…μž„λ“€μ΄ λͺ¨μ—¬ 객체가 μˆ˜ν–‰ν•˜λŠ” "μ—­ν• "을 κ΅¬μ„±ν•œλ‹€.

 

자율적인 κ°μ²΄λŠ” μžμ‹ μ—κ²Œ ν• λ‹Ήλœ μ±…μž„μ„ μˆ˜ν–‰ν•˜λ˜ 쀑에 ν•„μš”ν•œ 정보λ₯Ό μ•Œμ§€ λͺ»ν•˜κ±°λ‚˜ μ™ΈλΆ€μ˜ 도움이 ν•„μš”ν•œ 경우 μ μ ˆν•œ κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•΄μ„œ ν˜‘λ ₯을 μš”μ²­ν•œλ‹€. 이처럼 객체듀 μ‚¬μ΄μ˜ ν˜‘λ ₯을 κ΅¬μ„±ν•˜λŠ” 일련의 μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름을 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯이 κ΅¬ν˜„λœλ‹€

 

 

 ν˜‘λ ₯이 섀계λ₯Ό μœ„ν•œ λ¬Έλ§₯을 κ²°μ •ν•œλ‹€

 

객체의 행동을 κ²°μ •ν•˜λŠ” 것은 객체가 μ°Έμ—¬ν•˜κ³  μžˆλŠ” ν˜‘λ ₯이닀. ν˜‘λ ₯이 λ°”λ€Œλ©΄ 객체가 μ œκ³΅ν•΄μ•Ό ν•˜λŠ” 행동 μ—­μ‹œ λ°”λ€Œμ–΄μ•Ό ν•œλ‹€. ν˜‘λ ₯은 객체가 ν•„μš”ν•œ μ΄μœ μ™€ 객체가 μˆ˜ν–‰ν•˜λŠ” ν–‰λ™μ˜ 동기λ₯Ό μ œκ³΅ν•œλ‹€. 

 

μ˜ν™”λΌλŠ” κ°μ²΄λŠ” λŒ€λΆ€λΆ„ μ‚¬λžŒλ“€μ΄ λ“£λŠ” μˆœκ°„ κ·Ήμž₯μ—μ„œ μ˜ν™”λ₯Ό μƒμ˜ν•˜λŠ” μž₯면을 상상할 것이닀. ν•˜μ§€λ§Œ Screening과의 ν˜‘λ ₯μ—μ„œ μ˜ν™”λ₯Ό μƒμ˜ν•˜λŠ” μ±…μž„μ€ Movieμ—κ²Œ μžˆμ§€μ•Šκ³  였직 κΈˆμ•‘μ„ κ³„μ‚°ν•˜λŠ” 둜직만 λ‹΄κ²¨μžˆλ‹€. μ΄λ ‡κ²Œ ν˜‘λ ₯에 따라 객체가 결정이 되고, 결정이 되면 ν˜‘λ ₯에 λ§žλŠ” 행동이 κ²°μ •λœλ‹€.

 

객체의 행동을 κ²°μ •ν•˜λŠ” 것이 ν˜‘λ ₯이라면 객체의 μƒνƒœλ₯Ό κ²°μ •ν•˜λŠ” 것은 행동이닀. 객체의 μƒνƒœλŠ” 객체가 행동을 μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ 정보가 λ¬΄μ—‡μΈμ§€λ‘œ κ²°μ •λœλ‹€. κ°μ²΄λŠ” μžμ‹ μ˜ μƒνƒœλ₯Ό 슀슀둜 κ²°μ •ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 자율적인 쑴재이기 λ•Œλ¬Έμ— 객체가 μˆ˜ν–‰ν•˜λŠ” 행동에 ν•„μš”ν•œ μƒνƒœλ„ ν•¨κ»˜ 가지고 μžˆμ–΄μ•Ό ν•œλ‹€. 

 

 

 

 

 μ±…μž„

 

μ±…μž„μ΄λž€ 객체에 μ˜ν•΄ μ •μ˜λ˜λŠ” 응집도 μžˆλŠ” ν–‰μœ„μ˜ μ§‘ν•©μœΌλ‘œ, 객체가 μœ μ§€ν•΄μ•Ό ν•˜λŠ” 정보와 μˆ˜ν–‰ν•  수 μžˆλŠ” 행동에 λŒ€ν•΄ 개랡적으둜 μ„œμˆ ν•œ λ¬Έμž₯이닀. 

 

객체지ν–₯ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λŠ₯λ ₯은 μ±…μž„μ„ λŠ₯μˆ™ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄ 객체에 ν• λ‹Ήν•˜λŠ” 것이닀. ν˜‘λ ₯이 μ€‘μš”ν•œ μ΄μœ λ„ κ²°κ΅­ μ±…μž„μ„ κ²°μ •ν•  수 μžˆλŠ” λ¬Έλ§₯을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 객체 κ΅¬ν˜„ 방법은 μƒλŒ€μ μœΌλ‘œ μ±…μž„λ³΄λ‹€λŠ” 덜 μ€‘μš”ν•˜λ©° μ±…μž„μ„ κ²°μ •ν•œ λ‹€μŒμ— 고민해도 λŠ¦μ§€ μ•Šλ‹€. 

 

자율적인 객체λ₯Ό λ§Œλ“œλŠ” κ°€μž₯ 기본적인 방법은 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ 정보λ₯Ό κ°€μž₯ 잘 μ•Œκ³  μžˆλŠ” μ „λ¬Έμ—κ²Œ κ·Έ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” 것이닀. 이λ₯Ό μ±…μž„ 할당을 μœ„ν•œ "INFORMATION EXPERT(정보 μ „λ¬Έκ°€)νŒ¨ν„΄" 이라고 λΆ€λ₯Έλ‹€.

 

ν˜‘λ ₯을 μ„€κ³„ν•˜λŠ” μΆœλ°œμ μ€ μ‹œμŠ€ν…œμ΄ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ‹œμŠ€ν…œμ΄ λ‹΄λ‹Ήν•  ν•˜λ‚˜μ˜ μ±…μž„μœΌλ‘œ λ°”λΌλ³΄λŠ” 것이닀. 객체지ν–₯ μ„€κ³„λŠ” μ‹œμŠ€ν…œμ˜ μ±…μž„μ„ μ™„λ£Œν•˜λŠ” 데 ν•„μš”ν•œ 더 μž‘μ€ μ±…μž„μ„ μ°Ύμ•„λ‚΄κ³  이λ₯Ό κ°μ²΄λ“€μ—κ²Œ ν• λ‹Ήν•˜λŠ” 반볡적인 과정을 톡해 λͺ¨μ–‘을 κ°–μΆ°κ°„λ‹€. 

 

μ˜ν™”μ˜ˆλ§€ μ‹œμŠ€ν…œμ„ 예둜 λ“€μ–΄λ³΄μž. 

 

1. "μ˜ˆλ§€ν•˜λΌ"λΌλŠ” λ©”μ‹œμ§€λ‘œ ν˜‘λ ₯을 μ‹œμž‘.

> λ©”μ‹œμ§€λ₯Ό μ„ νƒν–ˆμœΌλ©΄ μ²˜λ¦¬ν•  μ μ ˆν•œ 객체λ₯Ό 선택해야 ν•œλ‹€. μ •λ³΄μ˜ μ „λ¬Έκ°€μ—κ²Œ 맑겨야 ν•˜λŠ”λ° 예맀λ₯Ό μœ„ν•΄μ„œλŠ” μƒμ˜μ‹œκ°„κ³Ό κΈ°λ³Έ μš”κΈˆμ„ μ•Œμ•„μ•Όν•œλ‹€. 이λ₯Ό κ°€μž₯ 잘 μ•Œκ³  μžˆλŠ” μ „λ¬Έκ°€λŠ” Screening이닀.

 

2. Screening은 "μ˜ˆλ§€ν•˜λΌ" λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œλ‹€.

> 가격을 μ •ν™•ν•˜κ²Œ κ³„μ‚°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€λ₯Έ μ™ΈλΆ€μ˜ κ°μ²΄μ—κ²Œ μ±…μž„μ„ μœ„μž„ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό 잘 μ•Œκ³  μžˆλŠ” 건 Movie객체이닀. 

 

이처럼 객체지ν–₯ μ„€κ³„λŠ” ν˜‘λ ₯에 ν•„μš”ν•œ λ©”μ‹œμ§€λ₯Ό μ°Ύκ³  λ©”μ‹œμ§€μ— μ μ ˆν•œ 객체λ₯Ό μ„ νƒν•˜λŠ” 반볡적인 과정을 톡해 이뀄진닀. 

 

 

이처럼 μ±…μž„μ„ μ€‘μ‹¬μœΌλ‘œ 객체λ₯Ό μ„€κ³„ν•˜λŠ” 방법을 "μ±…μž„ 주도 섀계"라고 λΆ€λ₯Έλ‹€.

 

 

 

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

 

객체가 λ©”μ‹œμ§€λ₯Ό μ„ νƒν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ©”μ‹œμ§€κ°€ 객체λ₯Ό μ„ νƒν•˜λ„λ‘ 섀계λ₯Ό ν•΄μ•Όν•˜λŠ” 두 가지 μ΄μœ κ°€ μžˆλ‹€.

 

1. 객체가 "μ΅œμ†Œν•œμ˜ μΈν„°νŽ˜μ΄μŠ€"λ₯Ό κ°€μ§ˆ 수 있게 λœλ‹€.

- ν•„μš”ν•œ λ©”μ‹œμ§€κ°€ 식별될 λ•ŒκΉŒμ§€ 객체의 퍼블릭 μΈν„°νŽ˜μ΄μŠ€κ°€ μΆ”κ°€λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ°μ²΄λŠ” ν˜‘λ ₯에 ν•„μš”ν•œ 크지도, μž‘μ§€λ„ μ•Šμ€ κΌ­ ν•„μš”ν•œ 크기의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

 

2. κ°μ²΄λŠ” μΆ©λΆ„νžˆ "좔상적인 μΈν„°νŽ˜μ΄μŠ€"λ₯Ό κ°€μ§ˆ 수 있게 λœλ‹€. 

- 객체의 μΈν„°νŽ˜μ΄μŠ€λŠ” 무엇(what)을 λ…ΈμΆœν•˜κ³  μ–΄λ–»κ²Œ(how)λ₯Ό λ…ΈμΆœν•΄μ„œλŠ” μ•ˆ λœλ‹€. λ©”μ‹œμ§€λŠ” μ™ΈλΆ€μ˜ 객체가 μš”μ²­ν•˜λŠ” 무언가λ₯Ό μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— λ©”μ‹œμ§€λ₯Ό λ¨Όμ € μ‹λ³„ν•˜λ©΄ 무엇을 μˆ˜ν–‰ν• μ§€μ— μ΄ˆμ μ„ λ§žμΆ”λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 얻을 수 μžˆλ‹€. 

 

 

 

 ν–‰λ™μ΄ μƒνƒœλ₯Ό κ²°μ •ν•œλ‹€

 

객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ— κ°“ μž…λ¬Έν•œ μ‚¬λžŒλ“€μ΄ κ°€μž₯ μ‰½κ²Œ λΉ μ§€λŠ” μ‹€μˆ˜λŠ” 객체의 행동이 μ•„λ‹ˆλΌ μƒνƒœμ— μ΄ˆμ μ„ λ§žμΆ”λŠ” 것이닀. μ΄ˆλ³΄μžλ“€μ€ λ¨Όμ € 객체에 ν•„μš”ν•œ μƒνƒœκ°€ 무엇인지 νŒŒμ•…ν•˜κ³  그에 λ”°λ₯Έ 행동을 κ²°μ •ν•œλ‹€. 이런 방식은 객체의 λ‚΄λΆ€ κ΅¬ν˜„μ΄ 객체의 μΈν„°νŽ˜μ΄μŠ€μ— λ…ΈμΆœλ˜λ„λ‘ λ§Œλ“€κΈ° λ•Œλ¬Έμ— "μΊ‘μŠν™”"λ₯Ό μ €ν•΄ν•œλ‹€. 

 

객체의 λ‚΄λΆ€ κ΅¬ν˜„μ„ λ³€κ²½ν•˜λ©΄ 퍼블릭 μΈν„°νŽ˜μ΄μŠ€λ„ ν•¨κ»˜ λ³€κ²½λ˜κ³ , κ²°κ΅­ 객체에 μ˜μ‘΄ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³€κ²½μ˜ 영ν–₯이 μ „νŒŒλœλ‹€. 이처럼 객체의 λ‚΄λΆ€ κ΅¬ν˜„μ— μ΄ˆμ μ„ 맞좘 섀계 방법을 "데이터-주도 섀계"라고 λΆ€λ₯΄κΈ°λ„ ν–ˆλ‹€.

 

 

 

 μ—­ν• 

 

객체가 νŠΉμ •ν•œ ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ˜ 집합을 "μ—­ν• "이라고 λΆ€λ₯Έλ‹€. 

 

μ‹€μ œλ‘œ ν˜‘λ ₯을 λͺ¨λΈλ§ν•  λ•ŒλŠ” νŠΉμ •ν•œ 객체가 μ•„λ‹ˆλΌ μ—­ν• μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•œλ‹€κ³  μƒκ°ν•˜λŠ” 게 μ’‹λ‹€. μ™œλƒν•˜λ©΄ μ—­ν•  κ°œλ…μ„ μ‚¬μš©ν•˜λ©΄ μœ μ—°ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ ν˜‘λ ₯을 λ§Œλ“€ 수 있기 λ•Œλ¬Έμ΄λ‹€. 

 

예λ₯Ό λ“€μ–΄ MovieλΌλŠ” κ°μ²΄λŠ” ν• μΈμš”κΈˆ μ •μ±…μœΌλ‘œ AmountDiscountPolicy와 PercentDiscountPolicy와 ν˜‘λ ₯을 ν•  수 μžˆλŠ”λ° μ—­ν• μ˜ κ°œλ…μ΄ μ—†λ‹€λ©΄ MovieλŠ” λΉ„μŠ·ν•œ 일을 ν•˜λŠ” 두 개의 객체와 ν˜‘λ ₯을 ν•˜κ²Œλ˜μ–΄ 쀑볡이 λ°œμƒν•œλ‹€. 이 λ‘κ°œμ˜ 정책이 "할인 μš”κΈˆ 계산"μ΄λΌλŠ” λ™μΌν•œ μ±…μž„μ„ κ³΅μœ ν•˜κ³  ν˜‘λ ₯을 ν•œλ‹€λ©΄ ν•˜λ‚˜λ‘œ 톡합할 수 μžˆμ„ 것이닀. 이 ν•˜λ‚˜μ˜ μŠ¬λ‘―μ—λŠ” μ—¬λŸ¬ λ‹€λ₯Έ 정책이 λ“€μ–΄μ˜¬ μˆ˜λ„ μžˆμ„ 것이고 μΌμ’…μ˜ 슬둯으둜 생각할 수 μžˆλ‹€. 이 슬둯이 λ°”λ‘œ "μ—­ν• "이닀. 

 

'역할은 λ‹€λ₯Έ κ²ƒμœΌλ‘œ ꡐ체할 수 μžˆλŠ” μ±…μž„μ˜ 집합이닀.'

 

μš”μ μ€ λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 역할을 기반으둜 두 개의 ν˜‘λ ₯을 ν•˜λ‚˜λ‘œ 톡합할 수 μžˆλ‹€λŠ” 것이닀. 이제 μƒˆλ‘œμš΄ 할인 정책을 μΆ”κ°€ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ ν˜‘λ ₯을 μΆ”κ°€ν•  ν•„μš”κ°€ μ—†μ–΄μ‘Œλ‹€. λ”°λΌμ„œ μ±…μž„κ³Ό 역할을 μ€‘μ‹¬μœΌλ‘œ ν˜‘λ ₯을 λ°”λΌλ³΄λŠ” 것이 λ³€κ²½κ³Ό ν™•μž₯이 μš©μ΄ν•œ μœ μ—°ν•œ μ„€κ³„λ‘œ λ‚˜μ•„κ°€λŠ” μ²«κ±ΈμŒμ΄λ‹€. 

 

역할을 κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ 일반적인 방법은 "좔상 클래슀"와 "μΈν„°νŽ˜μ΄μŠ€"λ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀. 이 κ°œλ…λ“€μ„ μ΄μš©ν•΄μ„œ ꡬ체적인 κ°μ²΄λ“€μ˜ νƒ€μž…μ„ μΊ‘μŠν™”ν•˜μž. 

 

그럼 객체와 μ—­ν• μ˜ μ°¨μ΄λŠ” λ¬΄μ—‡μΌκΉŒ? 

λ§Œμ•½ λ™μΌν•œ μ’…λ₯˜μ˜ 객체가 ν•˜λ‚˜μ˜ 역할을 항상 μˆ˜ν–‰ν•œλ‹€λ©΄ λ‘˜μ€ λ™μΌν•œ 것이닀. ν•˜μ§€λ§Œ μ–΄λ–€ ν˜‘λ ₯μ—μ„œ ν•˜λ‚˜ μ΄μƒμ˜ 객체가 λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€λ©΄ 역할은 μ„œλ‘œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” μ±…μž„μ˜ 집합이 λœλ‹€. 

λ‹€μ‹œ 말해 ν˜‘λ ₯에 μ ν•©ν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” λŒ€μƒμ΄ ν•œ μ’…λ₯˜λΌλ©΄ 객체둜 κ°„μ£Όν•˜κ³  μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체듀이 μ°Έμ—¬ν•  수 μžˆλ‹€λ©΄ 역할이라고 λΆ€λ₯Έλ‹€. 

 

ν˜‘λ ₯ μ•ˆμ—μ„œ μ—­ν• μ΄λΌλŠ” 좔상화λ₯Ό μ΄μš©ν•˜λ©΄ κΈ°μ‘΄ μ½”λ“œ μˆ˜μ •μ—†μ΄ μƒˆλ‘œμš΄ 행동을 μΆ”κ°€ν•  수 μžˆλ‹€. 결과적으둜 μ•žμœΌλ‘œ 좔가될 λ―Έμ§€μ˜ 할인 μ •μ±…κ³Ό 할인 쑰건을 μˆ˜μš©ν•  수 μžˆλŠ” μœ μ—°ν•œ 섀계λ₯Ό 얻을 수 μžˆλ‹€. ν”„λ ˆμž„μ›Œν¬λ‚˜ λ””μžμΈ νŒ¨ν„΄κ³Ό 같이 μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œλ‚˜ 섀계 아이디어λ₯Ό κ΅¬μ„±ν•˜λŠ” 핡심적인 μš”μ†Œκ°€ λ°”λ‘œ 역할이닀. 

 

 

 λ°°μš°μ™€ λ°°μ—­

 

λ°°μš°κ°€ μ—¬λŸ¬ 연극에 μ°Έμ—¬ν•˜λ©΄μ„œ μ—¬λŸ¬ 배역을 μ—°κΈ°ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ 객체 μ—­μ‹œ μ—¬λŸ¬ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€. λ”°λΌμ„œ κ°μ²΄λŠ” λ‹€μ–‘ν•œ 역할을 가진닀. 

 

κ°μ²΄λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•  λ•Œ ν˜‘λ ₯ μ•ˆμ—μ„œ ν•˜λ‚˜μ˜ μ—­ν• λ‘œ 보여진닀. 객체가 λ‹€λ₯Έ ν˜‘λ ₯에 μ°Έμ—¬ν•  λ•ŒλŠ” λ‹€λ₯Έ μ—­ν• λ‘œ 보여진닀. ν˜‘λ ₯의 κ΄€μ μ—μ„œ λ™μΌν•œ 역할을 μˆ˜ν–‰ν•˜λŠ” 객체듀은 μ„œλ‘œ λŒ€μ²΄ κ°€λŠ₯ν•˜λ‹€. 역할은 νŠΉμ •ν•œ 객체의 μ’…λ₯˜λ₯Ό μΊ‘μŠν™”ν•˜κΈ° λ•Œλ¬Έμ— λ™μΌν•œ 역할을 μˆ˜ν–‰ν•˜κ³  계약을 μ€€μˆ˜ν•˜λŠ” λŒ€μ²΄ κ°€λŠ₯ν•œ 객체듀은 λ‹€ν˜•μ μ΄λ‹€.