Interface์ Abstract Class๋ ์์(extends)๋ฐ๊ฑฐ๋, ๊ตฌํ(implements)ํ๋ Class๊ฐ Interface๋ Abstract Class ์์ ์๋ Abstract Method๋ฅผ ๊ตฌํํ๋๋ก ๊ฐ์ ํ๋ ๊ณตํต์ ์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด Interface์ Abstract Class ๋ ์ข
๋ฅ๊ฐ ์กด์ฌํ๋๊ฑด ์์ผ๊น?
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, Interface์ Abstract Class๋ ์กด์ฌ ๋ชฉ์ ์ด ๋ค๋ฅด๋ค.
Interface๋ ๋ถ๋ชจ, ์์ ๊ด๊ณ์ธ ์์ ๊ด๊ณ์ ์ฝ๋ฉ์ด์ง ์๊ณ , ๊ณตํต ๊ธฐ๋ฅ์ด ํ์ ํ ๋, Abstract Method๋ฅผ ์ ์ํด๋๊ณ ๊ตฌํ(implements)ํ๋ Class์์ ๊ฐ ๊ธฐ๋ฅ๋ค์ Overridngํ์ฌ ์ฌ๋ฌ๊ฐ์ง ํํ๋ก ๊ตฌํํ ์ ์๊ธฐ์ ๋คํ์ฑ๊ณผ ์ฐ๊ด๋์ด ์๋ค.
Interface๋ ํด๋น Interface๋ฅผ ๊ตฌํํ๋ Class๋ค์ ๋ํด ๋์ผํ method, ๋์์ ๊ฐ์ ํ๊ธฐ ์ํด ์กด์ฌํ๋ค.
Java์์ ๋ค์ค ์์์ด ์๋์ด ๋ฐ์ํ๋ Abstract Class์ ํ๊ณ๋ ๋ณด์ํด์ค ์ ์๋ค.
Interface์ implements์๋ ์ ํ์ด ์์ด ๋ค์ค ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋ชจ๋ Class๊ฐ Interface๋ฅผ ์ด์ฉํ๋ค๋ฉด, ๊ณตํต์ ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ๋ implementsํ๋ ๋ชจ๋ Class์์ Overrindgํด ์ฌ์ ์ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์กด์ฌํ๋ค.
Interface๋ ๊ฐ๊ฐ ๋ค๋ฅธ Abstract Class๋ฅผ ์์ํ๋ Class๋ค์ ๊ณตํต ๊ธฐ๋ฅ์ ๋ช
์ํ ๋ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
Abstract Class๋ ๋ถ๋ชจ์ ์์ ์ฆ, ์์ ๊ด๊ณ์์ Abstract Class๋ฅผ ์์(extends)๋ฐ์ผ๋ฉฐ ๊ฐ์ ๋ถ๋ชจ Class(์ฌ๊ธฐ์๋ Abstract Class)๋ฅผ ์์๋ฐ๋ ์์ Class๋ค ๊ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ ๊ฐ๊ฐ ๊ตฌํํ๊ณ , ํ์ฅ์ํค๋ฉฐ ์์๊ณผ ๊ด๋ จ๋์ด ์๋ค.
์์์ SuperClass์ ๊ธฐ๋ฅ์ ์ด์ฉ, ํ์ฅ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
Abstract Class๋ IS - A "~์ด๋ค"์ด๊ณ , Interface๋ HAS - A "~์ ํ ์ ์๋"์ด๋ค.
Abstract Class๋ฅผ ์์ํ๋ฉฐ Class๋ค๊ฐ์ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํด์ง๋ค.
Java์์๋ ๋ค์ค ์์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ Abstract Class ๋ง์ผ๋ก ๊ตฌํํด์ผํ๋ Abstract Method๋ฅผ ๊ฐ์ ํ๋๋ฐ๋ ํ๊ณ๊ฐ ์กด์ฌํ๋ค.
class Vehicle extends Car, Motorcycle {
@Override
public void run(){
super.drive();
}
}
๋ง์ฝ Java์์ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค๋ฉด Car, Motocycle์ ๊ฐ๊ฐ drive method๊ฐ ์ ์๋์ด ์์ ๊ฒฝ์ฐ ๋ฌด์์ ์์๋ฐ์ Overridng ํ๊ฑด์ง ๋ชจํธํด์ง๋ค.
์ด๊ฒ์ด ๋ค์ค ์์์ ๋ชจํธ์ฑ์ด๊ณ , ์ด ๋๋ฌธ์ Java๋ ๋ค์ค ์์์ ๋ง์ ๋์๋ค.
๋ง์ฝ ์๋์ ๊ฐ์ ํ์ค์ธ๊ณ์ ๊ฐ์ฒด๋ค์ Interface, Abstract Class๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ค๊ณ ํ๋ฉด ์๋์ ๊ฐ๋ค.

์ ์ผ ๋ถ๋ชจ Class์ธ Creature๋ ์๋ฌผ์ ๋ํ ์ ์๋ฅผ ๋ด๋ฆฌ๊ณ ์๋ Abstract Class์ด๋ค.
์ด๋ฅผ ์์ ๋ฐ๋ Animal(๋๋ฌผ), Plant(์๋ฌผ) Abstact Class๋ ๊ฐ๊ฐ ๋๋ฌผ, ์๋ฌผ์ ํน์ฑ์ abstarct method๋ก ์ ์ํด๋๋๋ค.
๋๋ฌผ(์์ง์ด๊ธฐ), ์๋ฌผ(๊ดํฉ์ฑํ๊ธฐ) ๋ฑ..
Animal Class๋ฅผ ์์๋ฐ๋ Monkey, Kim, Gil์ ๊ฐ๊ฐ ์์ญ์ด, ์ฌ๋, ์ฌ๋์ผ๋ก ์ฌ๋์ ์์ญ์ด์ ๋ค๋ฅด๊ฒ ๋ฐ๋ก ๋ง์ ํ ์ ์๋ ๊ธฐ๋ฅ(Talkable)์ด ์๊ณ , ์ด ์ค Gil์ด๋ผ๋ ์ฌ๋ Class๋ Program์ ํ ์ ์๋ค.
Plant Class๋ฅผ ์์๋ฐ๋ Venus Flytrap์ ํ๋ฆฌ ์ง์ฅ, ๋๋์ด ์ฃผ๊ฑฑ ์๋ฌผ๋ก์, ์๋ฌผ์ธ๋ฐ๋ ๋จน๋๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ Eatable Interface๋ฅผ ์ฌ์ฉํด Monkey, Kim, Gil, Venus Flaytrap ๋ชจ๋๊ฐ implementsํ๋ค.
์ฌ๊ธฐ์ Interface์ ์ฌ์ฉ ๋ชฉ์ ์ ์ ์ ์๋๋ฐ, Eatable Interface๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ Animal, Plant ๊ฐ๊ฐ ๋ค๋ฅธ ๋ถ๋ชจ Class๋ฅผ ์์๋ฐ๊ณ ์๋ Monkey, Kim, Gil, Venus Flaytrap์๊ฒ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ธ ๋จน๋ ๊ธฐ๋ฅ์ Interface๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์์ ๊ด๊ณ๊ฐ ๋ค๋ฆ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ก ๊ฐ์ ํ ์ ์๋ค.
Abstract Class์ ์ฌ์ฉ ๋ชฉ์ ์ ์ดํด๋ณด๋ฉด, ์ฌ์ค ์์ Talkable Interface๋ ๋์ผํ ๋ถ๋ชจ Class์ธ Animal์ ์์๋ฐ๋ Kim, Gil์์ ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ด๋ฅผ ์๋ก์ด Abstract Class๋ฅผ ์์ฑํด์ ์๋์ ๊ฐ์ด,

Animal Class๋ฅผ ์์๋ฐ๋ Human Class์ ๋งํ๋ ๊ธฐ๋ฅ์ abstarct method๋ก ์ ์ ํด๋์์ผ๋ก์จ, ๊ฐ์ ๋ถ๋ชจ class๋ฅผ ์์๋ฐ๋ ๊ด๊ณ์์ ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํ์ ๊ฐ์ ํ ์ ์๋ค.
์ ๊ทธ๋ฆผ ์์ ์์ Eatable Interface์ Human Abstarct Class๋ฅผ ์ ์ดํดํ๋ค๋ฉด, Interface์ Abstract Class์ ์ฐจ์ด์ ์ ์ค๊ณฝ์ ์ก์ ์ ์๋ค.
์ถ์ํํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฉ๋, ์ฐจ์ด์ , ๊ณตํต์ [์ ๋งค๋ ฅ]
๋๋ถ์ ์ฐจ์ด์ ์ ํ ๋ฐฉ์ ์ดํดํ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค!
์ค๊ฐ์ Kim๊ณผ Gil์ด eatable์ด์ด์ ์๊ฐ ๋นํฉํ์ต๋๋ค ใ ใ ใ