๋ก์ง์ ๋จ๊ณ ๋ณ๋ก ๋๋ ์ผ ํ๋ ์ํฉ์์ ์ ์ฉํ๋ค.
๋จ๊ณ๋ณ๋ก ๋๋ ๋ก์ง๋ค์ด ์์ผ๋ก ์์ ๋ ๊ฐ๋ฅ์ฑ์ด ์์ ๊ฒฝ์ฐ ๋ ํจ์จ์ ์ด๋ค.
- ํด๋์ค๋ ์ถ์(abstract)๋ก ๋ง๋ ๋ค.
- ๋จ๊ณ๋ฅผ ์งํํ๋ ๋ฉ์๋๋ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋๋ก final ํค์๋๋ฅผ ์ถ๊ฐํ๋ค.
- ๊ฐ ๋จ๊ณ๋ค์ ์ธ๋ถ๋ ๋ง๊ณ , ์์๋ค๋ง ํ์ฉํ ์ ์๋๋ก protected๋ก ์ ์ธํ๋ค.
์๋ฅผ ๋ค์ด๋ณด์. ํผ์๋ฅผ ๋ง๋ค ๋๋ ํฌ๊ฒ ๋ฐ์ฃฝ โ ํ ํ โ ๊ตฝ๊ธฐ
๋ก 3๋จ๊ณ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
์ด ๋จ๊ณ๋ ํญ์ ์ ์ง๋๋ฉฐ, ์์๊ฐ ๋ฐ๋ ์ผ์ ์๋ค. ๋ฌผ๋ก ์ค์ ๋ก๋ ๋์ฐ์ ๋ฐ๋ผ ๋ฐ์ฃฝ์ด ๋ฌ๋ผ์ง ์ ์๊ฒ ์ง๋ง, ์ผ๋จ ๋ชจ๋ ํผ์์ ๋ฐ์ฃฝ๊ณผ ๊ตฝ๊ธฐ๋ ๋์ผํ๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฌ๋ฉด ํผ์ ์ข ๋ฅ์ ๋ฐ๋ผ ํ ํ๋ง ๋ฐ๊พธ๋ฉด ๋๋ค.
abstract class Pizza {
protected void ๋ฐ์ฃฝ() { System.out.println("๋ฐ์ฃฝ!"); }
abstract void ํ ํ() {}
protected void ๊ตฝ๊ธฐ() { System.out.println("๊ตฝ๊ธฐ!"); }
final void makePizza() { // ์์ ๋ฐ์ ํด๋์ค์์ ์์ ๋ถ๊ฐ
this.๋ฐ์ฃฝ();
this.ํ ํ();
this.๊ตฝ๊ธฐ();
}
}
class PotatoPizza extends Pizza {
@Override
void ํ ํ() {
System.out.println("๊ณ ๊ตฌ๋ง ๋ฃ๊ธฐ!");
}
}
class TomatoPizza extends Pizza {
@Override
void ํ ํ() {
System.out.println("ํ ๋งํ ๋ฃ๊ธฐ!");
}
}
abstract ํค์๋๋ฅผ ํตํด ์์ ํด๋์ค์์๋ ์ ํ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ ์ ์๊ฒ ๋๋ค.
- abstract : ๋ถ๋ชจ์ ๊ธฐ๋ฅ์ ์์์์ ํ์ฅ์์ผ๋๊ฐ๊ณ ์ถ์ ๋
- interface : ํด๋น ํด๋์ค๊ฐ ๊ฐ์ง ํจ์์ ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ์ถ์ ๋
abstract๋ ๋ค์ค ์์์ด ์๋๋ค. ์ํฉ์ ๋ง๊ฒ ํ์ฉํ์!