[객체지ν–₯] 4. μ—­ν• , μ±…μž„, ν˜‘λ ₯ ⭐🌟

2022. 3. 24. 17:02ㆍJAVA/객체지ν–₯

728x90

 

객체의 μ„Έκ³„μ—μ„œλ„ ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯이 객체의 행동 방식을 κ²°μ •ν•œλ‹€. 

객체지ν–₯을 μž…λ¬Έν•œ μ‚¬λžŒλ“€μ΄ κ°€μž₯ 많이 ν•˜λŠ” μ‹€μˆ˜κ°€ ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯을 μƒκ°ν•˜μ§€ μ•Šκ³  객체가 κ°€μ Έμ•Όν•  μƒνƒœμ™€ 행동뢀터 κ³ λ―Όν•œλ‹€λŠ” 점이닀. 

 

μ€‘μš”ν•œ 것은 κ°œλ³„ 객체가 μ•„λ‹ˆλΌ 객체듀 사이에 μ΄λ€„μ§€λŠ” ν˜‘λ ₯이닀. 객체지ν–₯ μ„€κ³„μ˜ 전체적인 ν’ˆμ§ˆμ„ κ²°μ •ν•˜λŠ” 것은 κ°œλ³„ 객체의 ν’ˆμ§ˆμ΄ μ•„λ‹ˆλΌ μ—¬λŸ¬ 객체듀이 λͺ¨μ—¬ μ΄λ€„λ‚΄λŠ” ν˜‘λ ₯의 ν’ˆμ§ˆμ΄λ‹€. 

 

μ–΄λ–€ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ”μ§€κ°€ 객체에 ν•„μš”ν•œ 행동을 κ²°μ •ν•˜κ²Œ 되고, ν•„μš”ν•œ 행동이 객체의 μƒνƒœλ₯Ό κ²°μ •ν•œλ‹€. 

κ°œλ³„μ μΈ 객체의 ν–‰λ™μ΄λ‚˜ μƒνƒœκ°€ μ•„λ‹ˆλΌ 객체듀 κ°„μ˜ ν˜‘λ ₯에 μ§‘μ€‘ν•΄μ•Όν•œλ‹€! 

 

 

 

1️⃣ ν˜‘λ ₯

ν˜‘λ ₯은 μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ μ—°κ²°λ˜λŠ” μ‚¬λžŒλ“€μ˜ λ„€νŠΈμ›Œν¬μ΄λ‹€. 

ν˜‘λ ₯은 ν•œ μ‚¬λžŒμ΄ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 도움을 μš”μ²­ν•  λ•Œ μ‹œμž‘λ˜κ³ , μš”μ²­μ„ 받은 μ‚¬λžŒμ€ 일을 μ²˜λ¦¬ν•œ ν›„ μš”μ²­ν•œ μ‚¬λžŒμ—κ²Œ ν•„μš”ν•œ μ§€μ‹μ΄λ‚˜ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” κ²ƒμœΌλ‘œ μš”μ²­μ— μ‘λ‹΅ν•œλ‹€. 

 

결과적으둜 ν˜‘λ ₯은 λ‹€μˆ˜μ˜ μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ κ΅¬μ„±λ˜λ©° μ „μ²΄μ μœΌλ‘œ ν˜‘λ ₯은 λ‹€μˆ˜μ˜ 연쇄적인 μš”μ²­κ³Ό μ‘λ‹΅μ˜ νλ¦„μœΌλ‘œ κ΅¬μ„±λœλ‹€. 

그리고 νŠΉμ •ν•œ μš”μ²­μ„ 받아듀일 수 μžˆλŠ” μ΄μœ λŠ” κ·Έ μš”μ²­μ— λŒ€ν•΄ μ μ ˆν•œ λ°©μ‹μœΌλ‘œ μ‘λ‹΅ν•˜λŠ”λ° ν•„μš”ν•œ 지식과 행동 방식을 가지고 있기 λ•Œλ¬Έμ΄λ‹€. 그리고 μš”μ²­κ³Ό 응닡은 ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체가 μˆ˜ν–‰ν•  μ±…μž„μ„ μ •μ˜ν•œλ‹€. 

 

 

 

2️⃣ 객체 

μ–΄λ–€ λŒ€μƒμ— λŒ€ν•œ μš”μ²­μ€ κ·Έ 객체가 μš”μ²­μ„ μ²˜λ¦¬ν•  μ±…μž„μ΄ μžˆμŒμ„ μ•”μ‹œν•œλ‹€. 

ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체듀은 λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜λŠ”λ° ν•„μš”ν•œ μ±…μž„μ„ μˆ˜ν–‰ν•œλ‹€. 

-> 객체의 μ±…μž„μ€ '객체가 무엇을 μ•Œκ³  μžˆλŠ”κ°€(knowing)' κ³Ό '무엇을 ν•  수 μžˆλŠ”κ°€(doing)'둜 κ΅¬μ„±λœλ‹€. 

 

μ±…μž„μ€ 객체지ν–₯ μ„€κ³„μ˜ ν’ˆμ§ˆμ„ κ²°μ •ν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ μš”μ†Œλ‘œ 객체지ν–₯의 μ„€κ³„μ˜ μ˜ˆμˆ μ€ μ μ ˆν•œ κ°μ²΄μ—κ²Œ μ μ ˆν•œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ”λ° μžˆλ‹€. 

 

μ±…μž„μ€ 객체의 외뢀에 μ œκ³΅ν•  수 μžˆλŠ” 정보(μ•„λŠ” κ²ƒμ˜ μΈ‘λ©΄)κ³Ό 외뢀에 μ œκ³΅ν•΄ 쀄 수 μžˆλŠ” μ„œλΉ„μŠ€(ν•˜λŠ” κ²ƒμ˜ μΈ‘λ©΄)의 λͺ©λ‘μ΄λ‹€. λ”°λΌμ„œ μ±…μž„μ€ 객체의 곡용 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μ„±ν•œλ‹€. 

 

 

- μ±…μž„κ³Ό λ©”μ‹œμ§€ 

ν•œ 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ μ „μ†‘ν•œ μš”μ²­μ€ κ·Έ μš”μ²­μ„ μˆ˜μ‹ ν•œ 객체의 μ±…μž„μ΄ μˆ˜ν–‰λ˜κ²Œ ν•œλ‹€.

이처럼 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 주어진 μ±…μž„μ„ μˆ˜ν–‰ν•˜λ„λ‘ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것은 λ©”μ‹œμ§€ 전솑이라고 ν•œλ‹€. 

두 κ°μ²΄κ°„μ˜ ν˜‘λ ₯은 λ©”μ‹œμ§€λ₯Ό ν†΅ν•΄μ„œ 이뀄진닀. -> λ©”μ‹œμ§€λŠ” ν˜‘λ ₯을 μœ„ν•΄ ν•œ 객체가 λ‹€λ₯Έ 객체둜 μ ‘κ·Όν•˜λŠ” μœ μΌν•œ 방법이닀!

 

 

 

객체지ν–₯ μ„€κ³„λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 객체가 μ–΄λ–€ μ±…μž„μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜κ³  
μ–΄λ–€ κ°μ²΄λ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  것인지λ₯Ό κ²°μ •ν•˜λŠ” κ²ƒμœΌλ‘œλΆ€ν„° μ‹œμž‘λœλ‹€. 

 

 

 

3️⃣ μ—­ν•  

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

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

역할을 μˆ˜ν–‰ν•  수 μžˆλŠ” μ–΄λ–€ 객체라도 ν˜‘λ ₯에 μ°Έμ—¬ν•  수 μžˆλ‹€. 

 

역할을 λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 각 역할이 μˆ˜μ‹ ν•  수 μžˆλŠ” λ©”μ‹œμ§€λ₯Ό λ™μΌν•œ λ°©μ‹μœΌλ‘œ 이해해야 ν•œλ‹€. 

κ·ΈλŸ¬λ―€λ‘œ 역할을 λŒ€μ²΄ν•  수 μžˆλŠ” κ°μ²΄λŠ” λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό 이해할 수 μžˆλŠ” 객체둜 ν•œμ •λœλ‹€!

 

 

λ”°λΌμ„œ λ™μΌν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것은 ν•΄λ‹Ή 객체듀이 ν˜‘λ ₯ λ‚΄μ—μ„œ λ™μΌν•œ μ±…μž„μ˜ 집합을 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. 

λ™μΌν•œ 역할을 μˆ˜ν–‰ν•˜λŠ” 객체듀이 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 있기 λ•Œλ¬Έμ— λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것은 맀우 μ€‘μš”ν•˜λ‹€!!

 

 

- ν˜‘λ ₯의 좔상화 

μ—­ν• μ˜ κ°€μž₯ 큰 κ°€μΉ˜λŠ” ν•˜λ‚˜μ˜ ν˜‘λ ₯ μ•ˆμ—μ„œ μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체가 μ°Έμ—¬ν•  수 있게 ν•¨μœΌλ‘œμ¨ ν˜‘λ ₯을 좔상화할 수 μžˆλ‹€λŠ” 것이닀. 

ν˜‘λ ₯의 μΆ”μƒν™”λŠ” μ„€κ³„μžκ°€ 닀뀄야 ν•˜λŠ” ν˜‘λ ₯의 개수λ₯Ό μ€„μ΄λŠ” λ™μ‹œμ— ꡬ체적인 객체λ₯Ό 좔상적인 μ—­ν• λ‘œ λŒ€μ²΄ν•¨μœΌλ‘œμ¨ ν˜‘λ ₯의 양상을 λ‹¨μˆœν™”ν•œλ‹€. 

κ·ΈλŸ¬λ―€λ‘œ 역할을 μ΄μš©ν•˜λ©΄ ν˜‘λ ₯을 μΆ”μƒν™”ν•¨μœΌλ‘œμ¨ λ‹¨μˆœν™”ν•  수 μžˆλ‹€. 

 

 

- λŒ€μ²΄ κ°€λŠ₯μ„± 

역할은 λ‹€λ₯Έ 객체에 μ˜ν•΄ λŒ€μ²΄ κ°€λŠ₯함을 μ˜λ―Έν•œλ‹€. 

객체가 역할을 λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 행동이 ν˜Έν™˜λ˜μ–΄μ•Ό ν•œλ‹€. 

κ°μ²΄λŠ” ν˜‘λ ₯μ•ˆμ—μ„œ 역할이 μˆ˜ν–‰ν•  수 μžˆλŠ” 행동을 κ·ΈλŒ€λ‘œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€!

 

 

 

객체가 역할을 λŒ€μ²΄ κ°€λŠ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν˜‘λ ₯ μ•ˆμ—μ„œ
역할이 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  μ±…μž„μ„ λ™μΌν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Όν•œλ‹€. 

 

 

κ²°κ΅­ κ°μ²΄λŠ” 역할이 μ•”μ‹œν•˜λŠ” μ±…μž„λ³΄λ‹€ 더 λ§Žμ€ μ±…μž„μ„ κ°€μ§ˆ 수 μžˆλ‹€.

-> 역할이 μ’€ 더 μΌλ°˜ν™”μ΄κ³ , 객체의 νƒ€μž…μ€ νŠΉμˆ˜ν™”μ΄λ‹€. 

 

 

 

4️⃣ ν˜‘λ ₯에 따라 흐λ₯΄λŠ” 객체의 μ±…μž„ 

μ˜¬λ°”λ₯Έ 객체λ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € κ²¬κ³ ν•˜κ³  κΉ”λ”ν•œ ν˜‘λ ₯을 μ„€κ³„ν•΄μ•Όν•œλ‹€. 

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

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

 

 

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

ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯μ—μ„œ 객체가 μˆ˜ν–‰ν•˜κ²Œ 될 μ μ ˆν•œ μ±…μž„, 즉 행동을 κ²°μ •ν•œ 후에 κ·Έ 행동을 μˆ˜ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ 데이터λ₯Ό κ³ λ―Όν•΄μ•Όν•œλ‹€. 그리고 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 데이터와 행동이 μ–΄λŠμ •λ„ κ²°μ •λœ 후에 클래슀의 κ΅¬ν˜„ 방법을 κ²°μ •ν•΄μ•Όν•œλ‹€. 

 

 

 

5️⃣ 객체지ν–₯ 섀계 기법 : μ±…μž„-주도 섀계 

객체지ν–₯ μ„€κ³„λž€ μ• ν”Œλ¦°μΌ€μ΄μ…˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ ν˜‘λ ₯ 관계λ₯Ό κ³ μ•ˆν•˜κ³ , 
ν˜‘λ ₯에 ν•„μš”ν•œ μ—­ν• κ³Ό μ±…μž„μ„ μ‹λ³„ν•œ ν›„ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆλŠ” μ μ ˆν•œ 객체λ₯Ό 식별해 λ‚˜κ°€λŠ” 과정이닀. 

 

객체지ν–₯ μ„€κ³„μ˜ 핡심은 μ˜¬λ°”λ₯Έ μ±…μž„μ„ μ˜¬λ°”λ₯Έ κ°μ²΄μ—κ²Œ ν• λ‹Ήν•˜λŠ” 것이닀. 

ν˜‘λ ₯에 ν•„μš”ν•œ μ±…μž„λ“€μ„ μ‹λ³„ν•˜κ³  μ ν•©ν•œ κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” λ°©μ‹μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„€κ³„ν•œλ‹€. 

 

μ±…μž„-주도 μ„€κ³„λŠ” λ§κ·ΈλŒ€λ‘œ 객체의 μ±…μž„μ„ μ€‘μ‹¬μœΌλ‘œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 섀계 방법을 λ§ν•œλ‹€. 

μ±…μž„-주도 μ„€κ³„λŠ” κ°œλ³„μ μΈ 객체의 μƒνƒœκ°€ μ•„λ‹ˆλΌ 객체의 μ±…μž„κ³Ό μƒν˜Έμž‘μš©μ— μ§‘μ€‘ν•œλ‹€. 

 

결과적으둜 μ‹œμŠ€ν…œμ€ 슀슀둜 μžμ‹ μ„ μ±…μž„μ§ˆ 수 μžˆμ„ μ •λ„λ‘œ μΆ©λΆ„νžˆ 자율적인 λ™μ‹œμ— λ‹€λ₯Έ 객체와 우호적으둜 ν˜‘λ ₯ν•  수 μžˆμ„ μ •λ„λ‘œ μΆ©λΆ„νžˆ ν˜‘μ‘°μ μΈ κ°μ²΄λ“€λ‘œ 이뀄진 μƒνƒœκ³„λ₯Ό κ΅¬μ„±ν•˜κ²Œ λœλ‹€. 

 

 

 

6️⃣ 객체지ν–₯ 섀계 기법 : λ””μžμΈ νŒ¨ν„΄ 

λ””μžμΈ νŒ¨ν„΄μ€ 전문가듀이 반볡적으둜 μ‚¬μš©ν•˜λŠ” ν•΄κ²° 방법을 μ •μ˜ν•΄ 놓은 섀계 ν…œν”Œλ¦Ώμ˜ λͺ¨μŒμ΄λ‹€. 

νŒ¨ν„΄μ€ 전문가듀이 νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 이미 식별해 놓은 μ—­ν• , μ±…μž„, ν˜‘λ ₯의 λͺ¨μŒμ΄λ‹€. 

 

λ””μžμΈ νŒ¨ν„΄μ€ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” μ—­ν• , μ±…μž„, ν˜‘λ ₯의 ν…œν”Œλ¦Ώμ΄λ‹€, 

λ§Œμ•½ νŠΉμ •ν•œ 상황에 적용 κ°€λŠ₯ν•œ λ””μžμΈ νŒ¨ν„΄μ„ 잘 μ•Œκ³  μžˆλ‹€λ©΄ μ±…μž„-주도 μ„€κ³„μ˜ 절찰λ₯΄ 순차적으둜 λ”°λ₯΄μ§€ μ•Šκ³ λ„ μ‹œμŠ€ν…œ μ•ˆμ— κ΅¬ν˜„ν•  κ°μ²΄λ“€μ˜ μ—­ν• κ³Ό μ±…μž„, ν˜‘λ ₯ 관계λ₯Ό λΉ λ₯΄κ³  μ†μ‰½κ²Œ 포착할 수 μžˆμ„ 것이닀. 

 

 

 

7️⃣ 객체지ν–₯ 섀계 기법 : ν…ŒμŠ€νŠΈ 주도 개발 

ν…ŒμŠ€νŠΈ 주도 개발의 κΈ°λ³Έ 흐름은 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œ ν›„ 쀑볡을 μ œκ±°ν•˜λŠ” 것이닀. 

 

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

 

ν…ŒμŠ€νŠΈ-주도 κ°œλ°œμ€ μ±…μž„-주도 섀계λ₯Ό 톡해 도달해야 ν•˜λŠ” λͺ©μ μ§€λ₯Ό ν…ŒμŠ€νŠΈλΌλŠ” μ•ˆμ „μž₯치λ₯Ό 톡해 μ’€ 더 λΉ λ₯΄κ³  κ²¬κ³ ν•œ λ°©λ²•μœΌλ‘œ 도달할 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” μ΅œμƒμ˜ 섀계 ν”„λž™ν‹°μŠ€μ΄λ‹€. 

ν…ŒμŠ€νŠΈ-주도 κ°œλ°œμ€ 객체지ν–₯에 λŒ€ν•œ 깊이 μžˆλŠ” 지식을 μš”κ΅¬ν•œλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

좜처: 객체지ν–₯의 사싀과 μ˜€ν•΄_쑰영호 μ§€μŒ 

728x90