템플릿 메서드 패턴에 대한 설명과 사용 경험 #57
Replies: 3 comments
-
템플릿 메서드 패턴은 객체 지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 알고리즘의 공통된 부분을 상위 클래스에 정의하고, 각 단계의 구체적인 구현은 하위 클래스에서 처리하는 패턴입니다. 이 패턴을 사용하면 알고리즘의 구조는 유지되면서 구체적인 구현은 서브클래스에 위임됩니다. 템플릿 메서드 패턴을 사용하면 코드의 재사용성이 증가하고, 유지보수가 용이해지는 장점이 있습니다. 또한, 객체의 확장과 변화에 대응하기 쉽습니다. 공통적으로 필요한 부분과 각각의 다른 부분을 분리하여 자료의 구조를 보다 명확하게 설계할 수 있습니다. (개인 경험) public abstract class Participant {
public void hit(Card card) {
if (!isPlayable()) {
throw new IllegalStateException("카드를 더이상 받을 수 없습니다.");
}
hand = hand.add(card);
}
protected abstract boolean isPlayable();
} 부모 클래스인 Participant에서 카드를 뽑는 메서드를 만든다. |
Beta Was this translation helpful? Give feedback.
-
상위 클래스에서 알고리즘의 구조를 정의하고 하위 클래스에서 알고리즘의 구체적인 내용을 구현하는 패턴이다. 템플릿 메서드
추상 메서드
훅 메서드
사용 경험public abstract class NonPawn implements Piece {
private final Color color;
protected NonPawn(Color color) {
this.color = color;
}
@Override
public void validateMovement(Position source, Position target, Color targetColor) {
source.validateDifferentPosition(target);
validateDirection(source, target);
validateMoveCount(source, target);
validateDifferentColorFromOtherPiece(targetColor);
}
private void validateDifferentColorFromOtherPiece(Color targetColor) {
if (isSameColor(targetColor)) {
throw new IllegalArgumentException("같은 색의 기물이 존재합니다.");
}
}
protected abstract void validateDirection(Position source, Position target);
protected abstract void validateMoveCount(Position source, Position target);
} 체스미션에서 사용했다. |
Beta Was this translation helpful? Give feedback.
-
체스 미션에서 AbstractPiece에 템플릿 메서드를 정의하고, 하위 기물에서 추상 메서드를 구현하도록 했습니당 |
Beta Was this translation helpful? Give feedback.
-
.
Beta Was this translation helpful? Give feedback.
All reactions