[๋์์ธ ํจํด ์]
-
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
ํน์ ํ๊ฒฝ or ์ํฉ์ ๋ง๊ฒ ํ์ฅ, ๋ณ๊ฒฝํ ๋ ์ ์ฉํ ํจํด
์ถ์ ํด๋์ค, ๊ตฌํ ํด๋์ค ๋๋ก ๊ตฌ๋ถ.
์ถ์ํด๋์ค (Abstract Class) : ๋ฉ์ธ์ด ๋๋ ๋ก์ง ๋ถ๋ถ์ ์ผ๋ฐ ๋ฉ์๋๋ก ์ ์ธํด ๋ .
๊ตฌํํด๋์ค (Concrete Class) : ๋ฉ์๋๋ฅผ ์ ์ธ ํ ํธ์ถํ๋ ๋ฐฉ์.
- ์ฅ์
- ๊ตฌํ ํด๋์ค์์๋ ์ถ์ ํด๋์ค์ ์ ์ธ๋ ๋ฉ์๋๋ง ์ฌ์ฉํ๋ฏ๋ก, ํต์ฌ ๋ก์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ด
- ๊ฐ์ฒด ์ถ๊ฐ ๋ฐ ํ์ฅ ๊ฐ๋ฅ
- ๋จ์
- ์ถ์ ๋ฉ์๋๊ฐ ๋ง์์ง๋ฉด, ํด๋์ค ๊ด๋ฆฌ๊ฐ ๋ณต์กํจ.
-
์ค๋ช
- HouseTemplate.java
Template ์ถ์ ํด๋์ค๋ฅผ ํ๋ ์์ฑ. (์, HouseTemplate)
์ด HouseTemplate์ ์ฌ์ฉํ ๋๋,
"HouseTemplate houseType = new WoodenHouse()" ์ด๋ฐ ์์ผ๋ก ๋ฃ์.
HouseTemplate ๋ด๋ถ์ **buildHouse**๋ผ๋ ๋ณํด์๋ ์๋๋ ํต์ฌ ๋ก์ง์ ๋ง๋ค์ด ๋์. (์ฅ์ 1)
Template ํด๋์ค ๋ด๋ถ์ **ํต์ฌ ๋ก์ง ๋ด๋ถ์ ํจ์**๋ฅผ ์์ํ๋ ํด๋์ค๊ฐ ์ง์ ๊ตฌํํ๋๋ก, abstract๋ฅผ ์ง์ ํด ๋ .
public abstract class HouseTemplate { // ์ด๋ฐ ์์ผ๋ก buildHouse๋ผ๋ ํจ์ (ํต์ฌ ๋ก์ง)์ ์ ์ธํด ๋ . public final void buildHouse() { buildFoundation(); // (1) buildPillars(); // (2) buildWalls(); // (3) buildWindows(); // (4) System.out.println("House is built."); } // buildFoundation(); ์ ์ ๋ถ๋ถ (1) // buildWalls(); ์ ์ ๋ถ๋ถ (2) // ์์ ๋ ํจ์์๋ ๋ค๋ฅด๊ฒ ์ด ํด๋์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค๊ฐ ๋ณ๋๋ก ๊ตฌํํ์ผ๋ฉด ํ๋ ๋ฉ์๋๋ค์ abstract๋ก ์ ์ธํ์ฌ, ์ ์ํ๋๋ก ํจ public abstract void buildWalls(); // (3) public abstract void buildPillars();// (4) }
- WoodenHouse.java (GlassHouse.java๋ ๊ฐ๋ฅ)
HouseTemplate์ ์์๋ฐ๋ ํด๋์ค.
Wooden์ด๋, Glass์ ๋ฐ๋ผ์ buildHouse ๋ด๋ถ์ ํต์ฌ ๋ก์ง์ด ๋ฐ๋ ์ ์์ผ๋ฏ๋ก,
์ด ๋ถ๋ถ์ ๋ฐ๋์ ์ ์ธํ๋๋ก ์ง์ ํด๋ .
public class WoodenHouse extends HouseTemplate { @Override public void buildWalls() { System.out.println("Building Wooden Walls"); } @Override public void buildPillars() { System.out.println("Building Pillars with Wood coating"); } }
- ์ฅ์