728x90

μΈν„°νŽ˜μ΄μŠ€, μΆ”μƒν΄λž˜μŠ€

 

 

μœ„ν‚€λ…μŠ€

온라인 책을 μ œμž‘ κ³΅μœ ν•˜λŠ” ν”Œλž«νΌ μ„œλΉ„μŠ€

wikidocs.net

μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λŠ₯ μ΄λ¦„λ§Œ λͺ…μ‹œν•œ (= μΆ”μƒλ©”μ†Œλ“œ) 섀계도이닀.

: μœ‘μ‹λ™λ¬Ό{ μ§–λŠ”λ‹€() }

 

κ΅¬ν˜„μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό implementsν•˜μ—¬ 섀계도 μ„ΈλΆ€ λ‚΄μš©(= λ©”μ„œλ“œ λ‚΄μš© κ΅¬ν˜„)을 μž‘μ„±ν•œλ‹€.

: μ‚¬μž implements μœ‘μ‹λ™λ¬Ό { μ§–λŠ”λ‹€(){"으λ₯΄λ "} }

cf. μ—„λ°€νžˆ 말해 κ΅¬ν˜„μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ μΆ”μƒλ©”μ†Œλ“œλ₯Ό override ν•˜μ§€ μ•ŠλŠ”λ‹€. λ‹€λ§Œ 일뢀 IDEμ—μ„œ annotation 주석이 λ‹¬λ¦¬λŠ” 것은 일관성 μœ μ§€ 및 μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œμž„μ„ κ°•μ‘°ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. (https://groups.google.com/g/ksug/c/-mHQMX7d4tE?pli=1)

 

같은 λ©”μ†Œλ“œλͺ…μœΌλ‘œ λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ„μΆœν•œλ‹€.

: μ‚¬μž implements μœ‘μ‹λ™λ¬Ό { μ§–λŠ”λ‹€(){"으λ₯΄λ "} }

: ν˜Έλž‘μ΄ implements μœ‘μ‹λ™λ¬Ό { μ§–λŠ”λ‹€(){"μ–΄ν₯"} }

 

μ—¬λŸ¬ 동물이 같은 κΈ°λŠ₯(μ§–λŠ”λ‹€)을 μ‚¬μš©ν•  λ•Œ ν•˜λ‚˜μ˜ ν‹€(μΈν„°νŽ˜μ΄μŠ€)만 μ‚¬μš©ν•˜λ©΄ λœλ‹€.  λ¬Όλ‘  κΈ°λŠ₯만 λ”± 놓고 λ³Έλ‹€λ©΄ ꡳ이 μΈν„°νŽ˜μ΄μŠ€ μ•ˆ μ“°κ³  각 동물 κ°μ²΄λ§ˆλ‹€ 'μ§–λŠ”λ‹€' λ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ–΄μ€˜λ„ λœλ‹€. μ‚¬μž.μ§–λŠ”λ‹€(), ν˜Έλž‘μ΄.μ§–λŠ”λ‹€() μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ λ˜λ‹ˆκΉŒ.

 

근데 ꡳ이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” ꡬ쑰가 λˆˆμ— 보이기 λ•Œλ¬Έμ΄λ‹€. μ‚¬μžμ™€ ν˜Έλž‘μ΄κ°€ 같은 μœ‘μ‹λ™λ¬Όμ΄λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€. 1 섀계도 역할인 것이닀. 이건 λͺ…μ‹œμ μΈ μ΄μœ λ‹€.

 

또 λ‹€λ₯Έ μ΄μœ λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ£Όλ©΄, μ‚¬μžμ™€ ν˜Έλž‘μ΄κ°€ 같은 μœ‘μ‹λ™λ¬Όλ‘œμ„œ 2 일관성을 κ°€μ§ˆ 수 있기 λ•Œλ¬Έμ΄λ‹€. λ”°λΌμ„œ μ‹€μ œλ‘œ 객체λ₯Ό μ‚¬μš©ν•  λ•Œ μ‚¬μž 클래슀, ν˜Έλž‘μ΄ 클래슀λ₯Ό κ°€μ Έμ˜¬ ν•„μš” 없이 μœ‘μ‹λ™λ¬Όμ΄λΌλŠ” 큰 클래슀λ₯Ό μ‚¬μš©ν•˜κ³  μ½”λ“œλ„ μœ‘μ‹λ™λ¬Όμš© μ½”λ“œλ§Œ μ‚¬μš©ν•΄λ©΄ λ˜λ‹ˆκΉŒ μ½”λ“œκ°€ 깔끔해진닀. μ‚¬μž 맞좀용 ν‹€, ν˜Έλž‘μ΄ 맞좀용 틀이 μ•„λ‹ˆλΌ λ‘˜ λ‹€ 맞좜 수 μžˆλŠ” 큰 틀을 μ‚¬μš©ν•œλ‹€.

 

1κ³Ό 2의 이유만 보면 μΆ”μƒν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것과 닀름이 없어보인닀. κ·Έλž˜μ„œ 차이점! μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 또 λ‹€λ₯Έ μ΄μœ λŠ” 3 μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 받을 수 있기 λ•Œλ¬Έμ΄λ‹€. μžλ°”μ—μ„œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜λ§Œ 상속받을 수 μžˆλ‹€. (C++κ³Ό 달리 μ΄λ ‡κ²Œ 개발된 이유λ₯Ό 잘 λͺ¨λ₯΄κ² λ‹€!!) μ—¬λŸ¬ μžλ£Œν˜•μ˜ νŠΉμ§•μ„ λ°›μ•„ λ©”μ†Œλ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ 클래슀 말고 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•˜μ—¬ μ—¬λŸ¬ 개λ₯Ό implements ν•˜λ©΄ 됨.

 

되게 λ―Έλ¬˜ν•œ 차이닀. 특히 μž‘μ€ 규λͺ¨μ˜ ν”„λ‘œμ νŠΈλΌλ©΄ 차이λ₯Ό 느끼기 νž˜λ“€ 것 κ°™λ‹€. ν•˜μ§€λ§Œ 큰 규λͺ¨μ΄κ±°λ‚˜ μ—¬λŸ¬ μ‚¬λžŒμ΄ ν•¨κ»˜ν•΄μ•Ό ν•œλ‹€λ©΄ 이런 μ‹μœΌλ‘œ κ·œμ •ν•˜λŠ” 게 ν˜‘μ—… νš¨μœ¨μ€ λ‹Ήμ—°νžˆ 쒋을 λ“―.

 

μΆ”μƒν΄λž˜μŠ€ μΈν„°νŽ˜μ΄μŠ€
λͺ…μ‹œλ§Œ λ˜μ–΄ 있고 κ΅¬ν˜„λΆ€κ°€ μ—†λŠ” λ©”μ†Œλ“œ, 즉 μΆ”μƒλ©”μ†Œλ“œκ°€ μžˆλ‹€.
μΆ”μƒλ©”μ†Œλ“œλŠ” ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ€˜μ•Ό ν•œλ‹€.
일반 λ©”μ†Œλ“œλ„ μ‘΄μž¬ν•  수 μžˆκΈ°μ— κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄
abstract ν‚€μ›Œλ“œ μ‚¬μš©ν•¨
λͺ¨λ“  λ©”μ†Œλ“œκ°€ μΆ”μƒλ©”μ†Œλ“œλΌμ„œ λ”±νžˆ ꡬ뢄 ν•„μš” μ—†μŒ
μƒμ„±μžκ°€ μ—†λ‹€. κ΅¬ν˜„ν•˜λ €λ©΄ μ€‘κ°„μžκ°€ ν•„μš”ν•¨
μ€‘κ°„μžκ°€ extends둜 μƒμ†λ°›λŠ”λ‹€ μ€‘κ°„μžκ°€ implements둜 λ°›λŠ”λ‹€

 

 

 

 

 

 

λ‹€ν˜•μ„±

 

μœ„ν‚€λ…μŠ€

온라인 책을 μ œμž‘ κ³΅μœ ν•˜λŠ” ν”Œλž«νΌ μ„œλΉ„μŠ€

wikidocs.net

좔상 ν΄λž˜μŠ€λŠ” 메인, λͺ…μ‹œμ μΈ λ‹¨μœ„μ΄κ³ ,

μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λŠ₯, ν‘œν˜„μ μΈ λ‹¨μœ„μΈ λŠλ‚Œ

 

예λ₯Ό λ“€μ–΄, '동물', 'μ‚¬μž', 'ν˜Έλž‘μ΄', 'μ§–λŠ”λ™λ¬Ό','μœ‘μ‹λ™λ¬Ό'...  이런 ν΄λž˜μŠ€λ“€μ΄ μžˆμ„ λ•Œ

κ΅¬ν˜„μ²΄κ°€ 될 'μ‚¬μž'와 'ν˜Έλž‘μ΄'κ°€ extends, implements λ°›λŠ” 법은 λ‹€μŒκ³Ό κ°™λ‹€.

:μ‚¬μž extends 동물 implements μ§–λŠ”λ™λ¬Ό, μœ‘μ‹λ™λ¬Ό

:ν˜Έλž‘μ΄ extends 동물 implements μ§–λŠ”λ™λ¬Ό, μœ‘μ‹λ™λ¬Ό

 

μœ„μ—μ„œ, μ‚¬μžμ™€ ν˜Έλž‘μ΄λŠ” λ™λ¬Όμ΄μž μ§–λŠ” λ™λ¬Όμ΄μž μœ‘μ‹ 동물이닀! 이것이 λ‹€ν˜•μ„±μ΄λ‹€.(라고 ν•œλ‹€..)

λ”°λΌμ„œ μ‚¬μžμ™€ ν˜Έλž‘μ΄μ˜ 각 κ°μ²΄λŠ” 동물Animal , μ§–λŠ” 동물Barkable , μœ‘μ‹ 동물Pradatorλ‘œμ„œ ν‘œν˜„λ  수 μžˆλ‹€.

(단, 동물은 클래슀이고 μ§–λŠ” 동물과 μœ‘μ‹ 동물은 μΈν„°νŽ˜μ΄μŠ€μ΄λ©° μ„œλ‘œκ°„ 상속받지 μ•Šμ•˜λ‹€.)

Animal μ‚¬μž1 = new μ‚¬μž();

Barkable μ‚¬μž2 = new μ‚¬μž();

Pradator μ‚¬μž3 = new μ‚¬μž();

 

(

**주의

μ‚¬μž μ‚¬μž =  new μ‚¬μž(); λ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜λŠ” κ±° 아냐? 라고 μƒκ°ν–ˆλ‹€. 그러면 각 λ©”μ†Œλ“œλ₯Ό λͺ¨λ‘ μ“Έμˆ˜μ•Ό μžˆκ² μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•œ 첫 μ΄μœ κ°€ 사라진닀 γ…‹γ…‹

)

 

μœ„μ™€ 같이 μ •μ˜ν•˜λŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ μ‚¬μž 1,2,3듀이 μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ†Œλ“œλŠ” μ„œλ‘œ λ‹€λ₯΄λ‹€. λ§Œμ•½ μ € μ„Έ 가지 νŠΉμ§•μ„ ν•œλ²ˆμ— μ“°κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 μ‚¬μš©ν•œλ‹€. μ‚¬μš©ν•˜κ³ μ‹Άμ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λͺ¨λ‘ μƒμ†ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³ , κ·Έ μžλ£Œν˜•μ— κ΅¬ν˜„ν•œ 객체λ₯Ό λ„£μ–΄μ€€λ‹€.

:μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„ extends μ§–λŠ”λ™λ¬Ό, μœ‘μ‹λ™λ¬Ό // μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속이 κ°€λŠ₯함!

:μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„ μ‚¬μž = new μ‚¬μž();

 


맀번 λ³΄λŠ” κ°œλ…μΈλ° λ³Όλ•Œλ§ˆλ‹€ μƒˆλ‘­λ‹€.

검색할 땐 이해가 κ°”λ‹€κ°€, λ‚˜μ€‘μ— μƒκ°ν•˜λ©΄ 이해가 μ•ˆκ°€κ³ 

λ‹€μ‹œ μ΄ν•΄ν–ˆλ‹€κ°€ λ‚˜μ€‘μ— 까먹고

728x90

+ Recent posts