class Feed() { ... }
class Meet extends Feed { ... }
class Bone extends Feed { ... }
class Puppy {
private Feed feed;
public Puppy() {
this.feed = new Meet();
// Meet -> Bone ๋ณ๊ฒฝ ์ ์ผ์ผ์ด ๋ณ๊ฒฝํด์ค์ผํจ
}
...
}
Puppy๋ Feed ์ ๋ํด ์์กด์ ๊ฐ๋๋ค.
Feed ๊ฐ ๋ณ๊ฒฝ๋๋ฉด Puppy ๋ ๋ณ๊ฒฝํด์ค์ผํ๋ ๋ฌธ์ ์ ๋ด์ฐฉํ๋ค! (= ๊ฒฐํฉ๋ ๋์)Feed)๋ฅผ ๋ญ๋ฅผ ์ค์ง ์์ฑ์๋ฅผ ํตํด ๋ด๋ถ์์ ์ ํ๊ณ ์๋ค.(Meet)
์ด์ผ๋ฏผ, ํ ๋น์ ์คํ๋ง 3.1, ์์ด์ฝ(2012), p114
ํด๋์ค ๋ชจ๋ธ์ด๋ ์ฝ๋์๋ ๋ฐํ์ ์์ ์ ์์กด๊ด๊ณ๊ฐ ๋๋ฌ๋์ง ์๋๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ง ์์กดํ๊ณ ์์ด์ผ ํ๋ค.
๋ฐํ์ ์์ ์ ์์กด๊ด๊ณ๋ ์ปจํ ์ด๋๋ ํฉํ ๋ฆฌ ๊ฐ์ ์ 3์ ์กด์ฌ๊ฐ ๊ฒฐ์ ํ๋ค.
์์กด๊ด๊ณ๋ ์ฌ์ฉํ ์ค๋ธ์ ํธ์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ์ธ๋ถ์์ ์ ๊ณต(์ฃผ์ )ํด์ค์ผ๋ก์จ ๋ง๋ค์ด์ง๋ค.
class Puppy {
private Feed feed;
public Puppy(Feed feed) {
this.feed = feed;
}
}
class PuppyOwner {
private Puppy puppy = new Puppy(new Meet()); // ๋ํดํธ, Meet
public void changeFeed() {
feed = new Puppy(new Bone()); // ์ดํ ๋ณ๊ฒฝ, Bone
}
}