ν‹°μŠ€ν† λ¦¬ λ·°

"우리 λͺ¨λ‘λ₯Ό ν•©μΉœ 것보닀 더 ν˜„λͺ…ν•œ μ‚¬λžŒμ€ μ—†λ‹€." - Ken Blanchard

 

 

 

 

μ•žμ„  μž₯μ—μ„œ κ°œλ³„μ μΈ 객체의 행동,μƒνƒœμ— λŒ€ν•΄ μ‚΄νŽ΄λ΄€λ‹€λ©΄,

이번 μž₯은 객체듀 κ°„μ˜ ν˜‘λ ₯에 λŒ€ν•΄ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

 

1. ν˜‘λ ₯

 

AλΌλŠ” μ‚¬λžŒμ΄ Bμ—κ²Œ 도움을 μš”μ²­ν•œλ‹€.

BλΌλŠ” μ‚¬λžŒλ„ λ‹€λ₯Έμ‚¬λžŒμ—κ²Œ 도움을 μš”μ²­ν•œλ‹€.

 

Aν•¨μˆ˜κ°€ ν• μˆ˜ μžˆλŠ” 일이 있고

Bν•¨μˆ˜κ°€ ν• μˆ˜ μžˆλŠ” 일이 있음.

 

μš”μ²­(도움)을 μ—°μ‡„μ μœΌλ‘œ μš”μ²­ν•˜κ²Œ λœλ‹€.

 

 

 

μ±…μ—μ„œ λΉ„μœ ν•œ 이야기λ₯Ό μ˜ˆμ‹œλ‘œ ν˜‘λ ₯의 νŠΉμ„±μ„ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

 

 

μ΄μƒν•œλ‚˜λΌμ˜ μ•¨λ¦¬μŠ€ 이야기 속 μž¬νŒμ„ 객체지ν–₯ κ΄€μ μ—μ„œ λ΄€μ„λ•Œ

 

μ™•, ν•˜μ–€ν† λΌ, λͺ¨μž μž₯수 - 객체이며

ν•˜νŠΈ μž­μ„ μž¬νŒν•˜κΈ° μœ„ν•΄ ν˜‘λ ₯쀑이라고 λ³Ό 수 있음.

 

    1. λˆ„κ΅°κ°€κ°€ μ™•μ—κ²Œ μž¬νŒμ„ μš”μ²­

    2. 왕이 ν•˜μ–€ ν† λΌμ—κ²Œ 증인을 μš”μ²­

    3. ν† λΌλŠ” λͺ¨μžμž₯μˆ˜μ—κ²Œ 증언을 μš”μ²­

    ..

    ~

 

각각의 κ°μ²΄λŠ” μš”μ²­μ— 응닡해쀄 수 μžˆλŠ” 지식과 행동방식을 κ°€μ§€κ³  μžˆλ‹€.

그리고 μš”μ²­κ³Ό 응닡은 객체가 μˆ˜ν–‰ν•  μ±…μž„μ„ μ •μ˜ν•¨.

 

 

 

 

2. μ±…μž„

 

μš”μ²­μ— 응닡해 쀄 수 있으면 ν•΄λ‹Ή κ°μ²΄λŠ” μ±…μž„μ„ κ°€μ§„λ‹€κ³  λ§ν•œλ‹€.

μ™• - μž¬νŒμ„ μˆ˜ν–‰ν•  μ±…μž„

토끼 - 증인을 μš”μ²­ν•  μ±…μž„

λͺ¨μžμž₯수 - 증언을 ν•  μ±…μž„

 

 

 

 

"객체지ν–₯ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λŠ₯λ ₯은 μ±…μž„μ„ λŠ₯μˆ™ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄ 객체에 ν• λ‹Ήν•˜λŠ” 것"

κ΅¬ν˜„ν• λ•Œ 객체의 μ±…μž„μ„ 잘 μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•  ν•„μš”κ°€ μžˆλ‹€.

 

 

 

크레이그 라만의 μ±…μž„μ˜ λΆ„λ₯˜ 방법

    a. 객체가 무엇을 ν•˜λŠ”κ°€

        - 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ κ³„μ‚°ν•˜κ±°λ‚˜

        - λ‹€λ₯Έ 객체의 행동을 μ‹œμž‘ν•˜κ±°λ‚˜

 

    b. 객체가 무엇을 μ•„λŠ”κ°€

        - μžμ‹ μ΄ μœ λ„ν•˜κ±°λ‚˜ 계산할 수 것에 λŒ€ν•œ 지식 보유

        - κ΄€λ ¨λœ 객체에 κ΄€ν•΄ μ•ˆλ‹€

 

 

 

λͺ¨μž μž₯수(객체)의 경우 슀슀둜 증인석에 μž…μž₯ν•΄μ•Ό ν•˜λŠ” μ±…μž„κ³Ό

μžμ‹ μ΄ μ•Œκ³  μžˆλŠ” 사싀을 증언해야 ν•  μ±…μž„μ„ κ°€μ§€κ³  μžˆλ‹€.

 

 

μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ 곡용 μ„œλΉ„μŠ€μ˜ κ΄€μ μ—μ„œ 보면

 

μ±…μž„μ€ 객체의

    a. 외뢀에 μ œκ³΅ν•΄ 쀄 수 μžˆλŠ” μ„œλΉ„μŠ€(doing)와

    b. 외뢀에 μ œκ³΅ν•΄ 쀄 수 μžˆλŠ” 정보(knowing)의 λͺ©λ‘μ΄λ‹€.

 

-> μ±…μž„μ€ 객체의 곡용 μΈν„°νŽ˜μ΄μŠ€(public interface) 라고 λ³Ό 수 μžˆλ‹€.

 

 

 

 

3. μ—­ν• 

 

 

λͺ¨μžμž₯수 - '증인'μ΄λΌλŠ” 역할을 μˆ˜ν–‰

μ™• - 'νŒμ‚¬'λΌλŠ” 역할을 μˆ˜ν–‰

 

ꡳ이 왕을 νŒμ‚¬μ˜ 역할이라고 ν•˜λŠ” 이유

-> 역할이 μž¬μ‚¬μš© κ°€λŠ₯함을 의미 -> μœ μ—°ν•œ 객체지ν–₯ 섀계λ₯Ό ν•˜λ„λ‘ν•¨.

 

 

 

μ±…μ—μ„œ μ–ΈκΈ‰ν•˜λŠ” μ•¨λ¦¬μŠ€ μ΄μ•ΌκΈ°μ—μ„œ

μš”λ¦¬μ‚¬(증인2)κ°€ λ“±μž₯ -> 역할을 μž¬μ‚¬μš©μ„±μ„ 의미

 

μ™• - μž¬νŒμ„ μˆ˜ν–‰ν•  μ±…μž„

토끼 - 증인을 μš”μ²­ν•  μ±…μž„

μš”λ¦¬μ‚¬ - 증언을 ν•  μ±…μž„

 

 

재판의 과정은 동일.

역할을 맑은 μ‚¬λžŒμ΄ λ°”λ€œ

 

 

'νŒμ‚¬' - μž¬νŒμ„ μˆ˜ν–‰ν•  μ±…μž„

'토끼' - 증인을 μš”μ²­ν•  μ±…μž„

'증인' - 증언을 ν•  μ±…μž„

 

 

 

λŒ€μ²΄ κ°€λŠ₯ν•œ κ°μ²΄λŠ” λ©”μ„Έμ§€(μš”μ²­μ— λŒ€ν•œ 응닡)λ₯Ό 이해할 수 μžˆλŠ” 객체둜 ν•œμ •λ¨

 

 

 

μ—­ν• μ˜ λŒ€μ²΄ κ°€λŠ₯성은 ν–‰μœ„ ν˜Έν™˜μ„±μ„ μ˜λ―Έν•˜κ³ ,

ν–‰μœ„ ν˜Έν™˜μ„±μ€ λ™μΌν•œ μ±…μž„μ˜ μˆ˜ν–‰μ„ 의미.

 

 

 

 

ν˜‘λ ₯의 였λ₯˜

 

객체가 μ‘΄μž¬ν•˜λŠ” μ΄μœ λŠ”

데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄x

행동을 μˆ˜ν–‰ν•˜λ©° ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄μ„œλΌκ³  ν•©λ‹ˆλ‹€.

 

-> μ€‘μš”ν•œκ²ƒμ€ 객체의 행동, 즉 μ±…μž„μž…λ‹ˆλ‹€

 

κ·Έλž˜μ„œ ν”„λ‘œκ·Έλž˜λ°μ‹œ

객체가 ν˜‘λ ₯ μ•ˆμ—μ„œ μ–΄λ–€ μ±…μž„κ³Ό 역할을 μˆ˜ν–‰ν• κ²ƒμΈμ§€μ— λŒ€ν•΄ κ³ λ €ν•˜μ—¬ κ΅¬ν˜„ν•˜λŠ”κ²Œ μ€‘μš”ν•˜λ‹€.

(클래슀 κ°„μ˜ 관계 ν‘œν˜„μ— 쀑점을 두고 ν”„λ‘œκ·Έλž˜λ° ν•˜κΈ° λ³΄λ‹€λŠ”)

 

 

왕관을 μ“°κ³  μˆ˜μ—Όμ„ κΈ°λ₯΄κ³  κ·Όμ—„ν•œ ν‘œμ •μœΌλ‘œ μ™•μ’Œμ— μ•‰μ•„μžˆλŠ” μ™•μ˜ λͺ¨μŠ΅μ„ κ΅¬ν˜„ν•˜λŠ” 것

이런 μ™•μ˜ 겉λͺ¨μŠ΅μ€ μ€‘μš”ν•˜μ§€ μ•Šλ‹€κ³  ν•©λ‹ˆλ‹€.

 

μ€‘μš”ν•œ 뢀뢄은 -> μž¬νŒμ΄λΌλŠ” 'ν˜‘λ ₯'에 νŒμ‚¬μ˜ μ—­ν•  (객체의 μ±…μž„κ³Ό κ°μ²΄κ°„μ˜ ν˜‘λ ₯ 관계)

이런 뢀뢄을 κ³ λ €ν•˜μ—¬ κ΅¬ν˜„ν•˜λ©΄ μ’‹λ‹€κ³  ν•©λ‹ˆλ‹€.

 

 

 

객체지ν–₯ 섀계 기법

 

1. μ±…μž„-주도 섀계 방법 (Responsibility-Driven Design)

 

ν˜‘λ ₯(재판)에 ν•„μš”ν•œ μ±…μž„(νŒμ‚¬,증인)듀을 μ‹λ³„ν•˜κ³  μ ν•©ν•œ κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” λ°©μ‹μœΌλ‘œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„€κ³„ν•˜λŠ” 방법이라고 λ³Ό 수 있음.

 

        a. 제곡 ν•΄μ•Όν•˜λŠ” μ±…μž„μ„ νŒŒμ•…

        b. 더 μž‘μ€ μ±…μž„μœΌλ‘œ λΆ„ν• 

        c. μ±…μž„μ„ μ μ ˆν•œ κ°μ²΄μ—κ²Œ ν• λ‹Ή

        d. λ‹€λ₯Έ 객체의 도움이 ν•„μš”ν•  경우, 이λ₯Ό μ±…μž„μ§ˆ μ μ ˆν•œ 객체 λ˜λŠ” μ—­ν•  μ°ΎκΈ°

 

 

2. λ””μžμΈ νŒ¨ν„΄ (Design Pattern)

 

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

νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 식별해놓은 μ—­ν• , μ±…μž„, ν˜‘λ ₯의 λͺ¨μŒμ΄λΌκ³  λ³Ό 수 있음.

 

ex. Composite νŒ¨ν„΄ - 볡합 객체와 단일 객체의 처리 방법이 λ‹€λ₯΄μ§€ μ•Šμ„ 경우, 볡합 κ°μ²΄λ‚˜ 단일 객체λ₯Ό λ™μΌν•˜κ²Œ μ·¨κΈ‰ν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ λ‘” 방법. 

 

Directory - File 관계 :

μš”μ²­(경둜 λ³€κ²½)의 응닡 뢀뢄이 단일객체(File)인지 볡합객체(Directory)인지 ꡬ뢄 없이 λ™μΌν•˜κ²Œ μ²˜λ¦¬ν•œλ‹€.

 

 

 

- Component
객체(볡합객체 + 단일객체)λ“€μ˜ κ³΅ν†΅λ˜λŠ” λ©”μ†Œλ“œλ₯Ό μ •μ˜ (μΈν„°νŽ˜μ΄μŠ€)

λ‹€λ₯Έ Componentλ₯Ό μΆ”κ°€(add)ν•˜κ±°λ‚˜ 제거, μžμ‹μ„ λ°˜ν™˜ν•˜λŠ” μ±…μž„μ„ κ°€μ§€κ³  있음.

 

- Leaf
μƒμ„±λœ 단일 객체(File)


- Composite
Leafκ°μ²΄λ“€λ‘œ 이루어져 있으며(볡합객체) μ»΄ν¬λ„ŒνŠΈ λ‚΄ λͺ…령듀을 κ΅¬ν˜„ν•œλ‹€. 

 

- Client

Component μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄ λ³΅ν•©μ²΄ κ΅¬μ‘° λ‚΄μ˜ κ°μ²΄λ“€μ„ μ‘°μž‘ν•œλ‹€.

 

 

μ˜ˆμ‹œ - κ²Œμž„ μœ λ‹›

 

Unit - λͺ¨λ“  μœ λ‹›λ“€μ΄ κ°€μ§€λŠ” 곡톡 κΈ°λŠ₯κ³Ό 속성을 μ •μ˜ (getAttackPower())

LeafUnit (단일객체) - 단일 μœ λ‹›, 전사(10), λ§ˆλ²•μ‚¬(8)

GroupUnit (볡합객체) - λΆ€λŒ€1(전사2 => 20), λΆ€λŒ€2(전사1+λ§ˆλ²•μ‚¬2 => 26)

 

μž₯점: ν™•μž₯κ³Ό μœ μ—°μ„±μ— μ’‹μŒ. 계측 ꡬ쑰λ₯Ό 효과적으둜 λ‹€λ£Έ

 

 

ex. Apapter νŒ¨ν„΄ - ν”„λ ˆμž„μ›Œν¬λ‚˜ 라이브러리 등이 λ°”λ€”λ•Œλ§ˆλ‹€ μˆ˜μ •ν•  ν•„μš” 없도둝 ν˜Έν™˜λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄ λ‘λŠ”κ²ƒ(돼지코 μ–΄λŒ‘ν„°λ₯Ό λ– μ˜¬λ €λ³΄μ„Έμš”..)

 

 

 

3. ν…ŒμŠ€νŠΈ 주도 개발 (Test-Driven Development)

 

ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  ν†΅κ³Όν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄μ„œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ™„μ„±ν•΄λ‚˜κ°€λŠ” 방법.

μ‹€μ œ λͺ©μ μ€ ꡬ체적인 μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ‚˜κ°€λ©΄μ„œ

μ—­ν• , μ±…μž„, ν˜‘λ ₯을 μ‹λ³„ν•˜κ³  μ—­ν• , μ±…μž„, ν˜‘λ ₯이 μ ν•©ν•œμ§€ ν”Όλ“œλ°± λ°›λŠ”κ²ƒ.

 

 

 

 

μ—­ν• , μ±…μž„, ν˜‘λ ₯을 잘 κ΅¬λΆ„ν•˜κ³  μ •μ˜ν•΄μ„œ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ„λ‘ ν•©μ‹œλ‹€.

λŒ“κΈ€