๋ฐ์ํ
Template Method ํจํด
๐ก ์์ ํด๋์ค์์ ์ฒ๋ฆฌ์ ๋ผ๋๋ฅผ ๊ฒฐ์ ํ๊ณ ํ์ ํด๋์ค์์ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ๊ฒฐ์
๋ฑ์ฅ์ธ๋ฌผ
- `AbstractClass` (์ถ์ ํด๋์ค)
- ํ ํ๋ฆฟ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ฉฐ, ํ ํ๋ฆฟ ๋ฉ์๋์์ ์ฌ์ฉํ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธ
- ์ถ์ ๋ฉ์๋๋ ํ์ ํด๋์ค์ธ `ConcreteClass` ์์ ๊ตฌํ
public abstract class AbstractDisplay {
// ํ์ ํด๋์ค์ ๊ตฌํ์ ๋งก๊ธฐ๋ ์ถ์ ๋ฉ์๋
public abstract void open();
public abstract void print();
public abstract void close();
// AbstractDisplay์์ ๊ตฌํํ๋ ๋ฉ์๋ -> ํ
ํ๋ฆฟ ๋ฉ์๋
public final void display() {
open();
for(int i = 0; i < 5 ; i++) {
print();
}
close();
}
}
- `ConcreteClass` (๊ตฌํ ํด๋์ค)
- `AbstractClass` ์์ ์ ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํ
- ์ฌ๊ธฐ์ ๊ตฌํํ๋ ๋ฉ์๋๋ `AbstractClass` ์ ํ ํ๋ฆฟ ๋ฉ์๋์์ ํธ์ถ
public class CharDisplay extends AbstractDisplay {
private char ch;
public CharDisplay(char ch) {
this.ch = ch;
}
// AbstractDisplay์์ ๊ตฌํ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๊ตฌํ
@Override
public void open() {
System.out.println("<<");
}
@Override
public void print() {
System.out.println(ch);
}
@Override
public void close() {
System.out.println(">>");
}
}
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์ฅ์
- ์์ ํด๋์ค์ ํ
ํ๋ฆฟ ๋ฉ์๋์ ์๊ณ ๋ฆฌ์ฆ์ด ๊ธฐ์ ๋์ด ์์ผ๋ฏ๋ก, ํ์ ํด๋์ค์์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ผ์ผ์ด ๊ธฐ์ ํ ํ์๊ฐ ์์
→ ๋ก์ง์ ๊ณตํตํํ ์ ์๋ค! - ํ ํ๋ฆฟ ๋ฉ์๋์ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋๋ผ๋ ํ ํ๋ฆฟ ๋ฉ์๋๋ง ์์ ํ๋ฉด ๋จ
LSP
- The Liskov Substitution Principle
- ์์ ํด๋์คํ ๋ณ์์ ํ์ ํด๋์ค์ ์ธ์คํด์ค ์ค ์ด๋ ๊ฒ์ ๋์ ํด๋ ์ ๋๋ก ๋์ํ ์ ์๊ฒ ํ๋ ์์น
- `instanceof` ๋ฑ์ผ๋ก ํ์ํด๋์ค์ ์ข ๋ฅ๋ฅผ ํน์ ํ์ง ์์๋ ๋์ํ๋ ๊ฒ
๐ ํด๋์ค ๊ณ์ธต๊ณผ ์ถ์ ํด๋์ค
ํ์ ํด๋์ค์ ์ฑ ์ (subclass responsibility)
- ํ์ ํด๋์ค์๋ ์์ ํด๋์ค์์ ์ ์ธํ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ ์ฑ ์์ด ์์
- ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ค๋ ๊ฒ์,
- ํ์ ํด๋์ค์์ ๊ทธ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ค.
- ํ์ ํด๋์ค์ ํด๋น ๋ฉ์๋ ๊ตฌํ์ ์์ฒญํ๋ค.
์ถ์ ํด๋์ค์ ์์
- ๋ฉ์๋์ ๋ณธ์ฒด๊ฐ ๊ธฐ์ ๋์ด ์์ง ์์, ๊ตฌ์ฒด์ ์ธ ์ฒ๋ฆฌ ๋ด์ฉ์ ์ ์ ์์
- ํ์ง๋ง ๋ฉ์๋์ ์ด๋ฆ์ ์ ํ๊ณ ๊ทธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ํ ํ๋ฆฟ ๋ฉ์๋์ ์ํด ์ฒ๋ฆฌ๋ฅผ ๊ธฐ์ ํ ์๋ ์์
- ๐ ์ถ์ ํด๋์ค ๋จ๊ณ์์ ์ฒ๋ฆฌ์ ํ๋ฆ์ ํ์ฑ!
๋ฐ์ํ
'๐ Study > ๋์์ธ ํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด ์ ๋ฌธ] 6. Prototype (0) | 2024.07.07 |
---|---|
[Java ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด ์ ๋ฌธ] 5. Singleton (0) | 2024.04.01 |
[Java ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด ์ ๋ฌธ] 4. Factory Method (0) | 2024.03.25 |
[Java ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด ์ ๋ฌธ] 2. Adapter (0) | 2024.03.07 |
[Java ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด ์ ๋ฌธ] 1. Iterator (0) | 2024.03.07 |