"์๋ ํ์ธ์, ์๋ฏธ๊ณ ! ํฅ๋ฏธ๋ก์ด ์ ์ฃผ์ ๊ฐ ์์ต๋๋ค."
"์ค๋์ ๋งคํน์ ์ธ ์ฃผ์ ์ ๋ ์ ๋๋ค!"
"์, ๊ณ ๋ง์!"
"์ฒ๋ง์์."
" ์ฒด์ค ๋ง์ ๋ํ ๋ชจ๋ ํด๋์ค๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ChessItem ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ๋์ ํ๋ ๋๋ฅผ ๊ธฐ์ตํ์ญ๋๊น?"
"์."
"์ด์ ๊ฐ ์กฐ๊ฐ์ ์กฐ๊ฐ์ ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ฉ์๋๊ฐ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์กฐ๊ฐ์ด ํ์ฌ ์ขํ์์ ์์ฒด์ ์ผ๋ก ๊ทธ๋ ค์ง๋๋ค. ์ด ๋ฉ์๋๋ฅผ ๊ธฐ๋ณธ ํด๋์ค๋ก ์ด๋ํ๋ ๊ฒ์ด ๋์์ด ๋ ๊น์?"
"์." ๋คํ์ฑ์ ๋ํด ๋ฐฐ์ด ํ์๋ ์ ํ์ ๊ด๊ณ์์ด ๋ชจ๋ ์กฐ๊ฐ์ ๋ํด ๋ ๋๋ง ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด ๊ฐ์:"
class ChessBoard
{
public void drawAllChessItems()
{
//draw them regardless of their type.
ArrayList <ChessItem> items = new ArrayList<ChessItem>();
items.add(new King());
items.add(new Queen());
items.add(new Bishop());
//draw them regardless of their type.
for (ChessItem item: items)
{
item.draw();
}
}
}
"์ ํ์ด. ๋ง์. ๊ทธ๋ฌ๋ฉด ChessItem ํด๋์ค ์์ฒด์ ๊ทธ๋ฆฌ๊ธฐ ๋ฉ์๋๋ก ๋ฌด์์ ํ ์ ์์๊น?"
"๋ชจ๋ฅด๊ฒ ์ด์. ์ฒด์ค์๋ ๊ทธ๋ฐ ์กฐ๊ฐ์ด ์์ด์. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์๊ฐ์ ํํ์ด ์๋ค๋ ๋ป์ ๋๋ค."
"๋ง์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ChessItem ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๊ทธ๋ฐ ์ฒด์ค ๋ง์ ์์ต๋๋ค. ๋จ์ง ์ถ์ํ์ผ ๋ฟ์ ๋๋ค . ํธ์๋ฅผ ์ํด ๋ง๋ ํด๋์ค ์ ๋๋ค. ์ด๊ฒ์ด OOP์์ ์ถ์ํ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋๋ค. ๋ชจ๋ ์กฐ๊ฐ๋ณ๋ก) ๋ฐ์ดํฐ ๋ฐ ๋ฉ์๋๋ฅผ ๊ธฐ๋ณธ ํด๋์ค ๋ก ํตํฉํ์ง๋ง ํน์ ์ฒด์ค ์กฐ๊ฐ์ ํด๋นํ๋ ํด๋์ค์์ ์ฐจ์ด์ ์ ์ ์งํ์ต๋๋ค."

Java์๋ ์ด๋ฅผ ์ํ ํน์ ํด๋์ค ์ ํ์ธ ์ถ์ ํด๋์ค๊ฐ ์์ต๋๋ค . ๋ค์์ ์ถ์ ํด๋์ค์ ๋ํด ๊ธฐ์ตํด์ผ ํ ์ธ ๊ฐ์ง ์ฌํญ์ ๋๋ค.
1) ์ถ์ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์๊ณ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ฅผ ์ถ์ ๋ฉ์๋๋ผ๊ณ ํฉ๋๋ค.
public abstract class ChessItem
{
public int x, y; //coordinates
private int value; //the piece's "value"
public int getValue() //an ordinary method, returns value
{
return value;
}
public abstract void draw(); //abstract method. There is no implementation.
}
2) ์ถ์ ๋ฉ์๋๋ ํค์๋ abstract ๋ก ํ์๋ฉ๋๋ค .
ํด๋์ค์ ์ถ์ ๋ฉ์๋๊ฐ ํ๋๋ง ์์ผ๋ฉด ํด๋น ํด๋์ค๋ abstract ๋ก ํ์๋ฉ๋๋ค .
3) ์ถ์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ ์ฝ๋๋ ๋จ์ํ ์ปดํ์ผ๋์ง ์์ต๋๋ค.
์๋ฐ ์ฝ๋ | ์ค๋ช |
---|---|
|
์ด ์ฝ๋๋ ์ปดํ์ผ๋์ง ์์ต๋๋ค. |
|
๊ทธ๋ฌ๋ ๋น์ ์ ์ด๊ฒ์ ํ ์ ์์ต๋๋ค. |
4) ํด๋์ค๊ฐ ์ถ์ ํด๋์ค๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ ์์๋ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ผ ํฉ๋๋ค. ์ฆ, ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋์ค๋ ์ถ์์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค. ํด๋์ค์ ์ง์ ์ ์ธ๋๊ฑฐ๋ ๋ถ๋ชจ ํด๋์ค์์ ์์๋ ๊ตฌํ๋์ง ์์ ๋ฉ์๋๊ฐ ํ๋๋ผ๋ ์๋ ๊ฒฝ์ฐ ํด๋น ํด๋์ค๋ ์ถ์ ํด๋์ค๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
"ํ์ง๋ง ์ด ๋ชจ๋ ๊ฒ์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ถ์ ํด๋์ค๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ผ๋ฐ ํด๋์ค๋ฅผ ๋์ ์ฌ์ฉํ ์ ์์ง ์์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋ฉ์๋ ๋์ ์ฌ๋ ์ค๊ดํธ์ ๋ซ๋ ์ค๊ดํธ๋ก ๊ตฌ์ฑ๋ ๋น ๊ตฌํ์ ๋ง๋ค ์๋ ์์ต๋๊น?"
"ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ํ์ ์์ ์์ ๊ฐ์ต๋๋ค private
. ์ฐ๋ฆฌ๋ private
์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ ์ผ๋ก ๋ฐ์ดํฐ์ ๋ํ ์ง์ ์ก์ธ์ค๋ฅผ ์ฐจ๋จํ๋ฏ๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ์ ํด๋์ค๊ฐ ์ฐ๋ฆฌ public
๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค."
์ถ์ ํด๋์ค์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ํด๋์ค๋ฅผ ์์ฑํ ์ฌ๋์ ๋๊ตฌ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ๋ฐ๋๋ก ์์ฑ์๋ ์์ ์ ์ถ์ ํด๋์ค์ ์ถ์ ๋ฉ์๋๊ฐ ์์๋๊ณ ์ฌ์ ์๋๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
"๋๋ ์์ง๋ ์ฐ๋ฆฌ๊ฐ ์ ์ฐ๋ฆฌ์ ์ถ์ ์ด๋ฐ ์์ผ๋ก ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ์ถ์ดํ๋์ง ์ดํดํ ์ ์์ต๋๋ค."
"์ด ๊ธฐ๋ฅ์ ์ฅ์ ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋ถ๋ช ํฉ๋๋ค. ํด๋์ค๊ฐ ๋ง์์๋ก ์ญํ ์ ๋ ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด์ ์ ๊ณง ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋๊ฐ ์ด ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค."
GO TO FULL VERSION