[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°8. λ‹€ν˜•μ„±, μΆ”μƒν΄λž˜μŠ€

2022. 4. 23. 22:19ㆍJAVA/μžλ°”μ˜ 정석

728x90

https://hyejin.tistory.com/567

 

[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°7. λ‹€ν˜•μ„±

1️⃣ λ‹€ν˜•μ„±(polymorphism) 객체지ν–₯κ°œλ…μ—μ„œ λ‹€ν˜•μ„±μ΄λž€ 'μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯'을 μ˜λ―Έν•˜λ©°, μžλ°”μ—μ„œλŠ” ν•œ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ˜ 객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•¨μœΌλ‘œμ¨

hyejin.tistory.com

 

1️⃣ μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체λ₯Ό λ°°μ—΄λ‘œ 닀루기 

μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜ 배열을 μ‚¬μš©ν•˜λ©΄, κ³΅ν†΅μ˜ 쑰상을 가진 μ„œλ‘œ λ‹€λ₯Έ μ’…λ₯˜μ˜ 객체λ₯Ό λ°°μ—΄λ‘œ λ¬Άμ–΄μ„œ λ‹€λ£° 수 μžˆλ‹€. 

λ˜λŠ” λ¬Άμ–΄μ„œ 닀루고싢은 κ°μ²΄λ“€μ˜ 상속관계λ₯Ό λ”°μ Έμ„œ κ°€μž₯ κ°€κΉŒμš΄ 곡톡쑰상 클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜ 배열을 μƒμ„±ν•΄μ„œ 객체듀을 μ €μž₯ν•˜λ©΄ λœλ‹€.

Product[] products = new Product[3];

products[0] = new Tv();

products[1] = new Computer();

products[2] = new Audio();

-> μ—¬κΈ°μ„œ λ¬Έμ œλŠ” λ°°μ—΄μ˜ 크기λ₯Ό 10개둜 μ§€μ •ν–ˆκΈ° λ•Œλ¬Έμ— 11개 이상 μ œν’ˆμ„ ꡬ맀할 수 μ—†λŠ” 것이 λ¬Έμ œλ‹€. 

κ·Έλ ‡λ‹€κ³  λ°°μ—΄μ˜ 크기λ₯Ό 무쑰건 크게 ν•  μˆ˜λ„ μ—†λ‹€ .

이런 κ²½μš°μ—λŠ” Vector 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€!

Vector ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ Object νƒ€μž…μ˜ 배열을 가지고 μžˆμ–΄μ„œ, 이 배열에 객체λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•  수 있게 μž‘μ„±λ˜μ–΄ μžˆλ‹€.

그리고 λ°°μ—΄μ˜ 크기λ₯Ό μ•Œμ•„μ„œ 관리해주기 λ•Œλ¬Έμ— μ €μž₯ν•  μΈμŠ€ν„΄μŠ€μ˜ κ°œμˆ˜μ— 신경쓰지 μ•Šμ•„λ„ λœλ‹€. 

 

 

2️⃣ μΆ”μƒν΄λž˜μŠ€ (abstract class)

클래슀λ₯Ό 섀계도에 λΉ„μœ ν•œλ‹€λ©΄, 좔상 ν΄λž˜μŠ€λŠ” λ―Έμ™„μ„± 섀계도에 λΉ„μœ ν•  수 μžˆλ‹€. 즉, μ™„μ„±λ˜μ§€ λͺ»ν•œ μ±„λ‘œ 남겨진 섀계도λ₯Ό λ§ν•œλ‹€. 

ν΄λž˜μŠ€κ°€ λ―Έμ™„μ„±μ΄λΌλŠ” 것은 λ©€λ²„μ˜ κ°œμˆ˜μ— κ΄€ν•œκ²ƒμ΄ μ•„λ‹ˆλΌ, 단지 λ―Έμ™„μ„± λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€λŠ” 것이닀. 

 

λ―Έμ™„μ„± μ„€κ³„λ„λ‘œ μ™„μ„±λœ μ œν’ˆμ„ λ§Œλ“€ 수 없듯이 μΆ”μƒν΄λž˜μŠ€λ‘œ μΈμŠ€ν„΄μŠ€λŠ” 생성할 수 μ—†λ‹€.

μΆ”μƒν΄λž˜μŠ€λŠ” 상속을 ν†΅ν•΄μ„œ μžμ†ν΄λž˜μŠ€μ— μ˜ν•΄μ„œλ§Œ 완성될 수 μžˆλ‹€. 

 

μΆ”μƒν΄λž˜μŠ€ μžμ²΄λ‘œλŠ” ν΄λž˜μŠ€λ‘œμ„œμ˜ 역할을 λ‹€ λͺ»ν•˜μ§€λ§Œ, μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ”λ° μžˆμ–΄μ„œ 바탕이 λ˜λŠ” μ‘°μƒν΄λž˜μŠ€λ‘œμ„œ μ€‘μš”ν•œ 의미λ₯Ό κ°–λŠ”λ‹€. μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•  λ•Œ 아무것도 μ—†λŠ” μƒνƒœμ—μ„œ μ‹œμž‘ν•˜λŠ” 것보닀 μ™„μ „ν•˜μ§€λŠ” λͺ»ν•˜λ”라도 μ–΄λŠ 정도 틀을 κ°–μΆ˜ μƒνƒœμ—μ„œ μ‹œμž‘ν•˜λŠ” 것이 λ‚˜μ„ 것이닀. 

 

μΆ”μƒν΄λž˜μŠ€λŠ” ν‚€μ›Œλ“œ abstractλ₯Ό λΆ™μ΄κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ 이 클래슀λ₯Ό μ‚¬μš©ν•  λ•Œ, 클래슀의 μ„ μ–ΈλΆ€μ˜ abstractλ₯Ό 보고 이 ν΄λž˜μŠ€μ—λŠ” μΆ”μƒλ©”μ„œλ“œκ°€ μžˆμœΌλ‹ˆ 상속을 ν†΅ν•΄μ„œ κ΅¬ν˜„ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” 것을 μ‰½κ²Œ μ•Œ 수 μžˆμ„ 것이닀. 

 

 

3️⃣ μΆ”μƒλ©”μ„œλ“œ (abstract method)

λ©”μ„œλ“œλŠ” 선언뢀와 κ΅¬ν˜„λΆ€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  κ΅¬ν˜„λΆ€λŠ” μž‘μ„±ν•˜μ§€ μ•Šμ€ μ±„λ‘œ 남겨 λ‘” 것이 μΆ”μƒλ©”μ„œλ“œμ΄λ‹€.

즉, μ„€κ³„λ§Œ ν•΄ 놓고 μ‹€μ œ μˆ˜ν–‰λ  λ‚΄μš©μ€ μž‘μ„±ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— λ―Έμ™„μ„± λ©”μ„œλ“œμΈ 것이닀. 

 

λ©”μ„œλ“œλ₯Ό 이와 같이 λ―Έμ™„μ„± μƒνƒœλ‘œ 남겨 λ†“λŠ” μ΄μœ λŠ” λ©”μ„œλ“œμ˜ λ‚΄μš©μ΄ μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ— 따라 λ‹¬λΌμ§ˆ 수 있기 λ•Œλ¬Έμ— 쑰상 ν΄λž˜μŠ€μ—μ„œλŠ” μ„ μ–ΈλΆ€λ§Œμ„ μž‘μ„±ν•˜κ³ , 주석을 덧뢙여 μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•  λͺ©μ μœΌλ‘œ μž‘μ„±λ˜μ—ˆλŠ”μ§€ μ•Œλ €μ£Όκ³ , μ‹€μ œ λ‚΄μš©μ€ μƒμ†λ°›λŠ” ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜λ„λ‘ λΉ„μ›Œ λ‘λŠ” 것이닀. 

κ·Έλž˜μ„œ μΆ”μƒν΄λž˜μŠ€λ₯Ό μƒμ†λ°›λŠ” μžμ† ν΄λž˜μŠ€λŠ” μ‘°μƒμ˜ 좔상 λ©”μ„œλ“œλ₯Ό 상황에 맞게 적절히 κ΅¬ν˜„ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. 

 

μΆ”μƒν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ†λ°›λŠ” μžμ†ν΄λž˜μŠ€λŠ” μ˜€λ²„λΌμ΄λ”©μ„ 톡해 쑰상인 μΆ”μƒν΄λž˜μŠ€μ˜ 좔상 λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. 

만일 μ‘°μƒμœΌλ‘œλΆ€ν„° 상속받은 μΆ”μƒλ©”μ„œλ“œ 쀑 ν•˜λ‚˜λΌλ„ κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μžμ† 클래슀 μ—­μ‹œ μΆ”μƒν΄λž˜μŠ€λ‘œ 지정해 μ£Όμ–΄μ•Ό ν•œλ‹€. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90