알고리즘의 골격을 정의한다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다.
OO 원칙
-할리우드 원칙: 저수준 구성요소가 시스템에 접속할 수는 있지만 언제 어떻게 그 구성요소를 사용할지는 고수준 구성요소가 결정한다. 의존성 부패를 방지한다.
** 의존성 부패: 어떤 고수준 구성요소가 저수준 구성요소에 의존하고, 그 저수준 구성요소는 다른 구성요소에 의존하여 의존성이 복잡하게 꼬여있는 상황
Abstract Class
public abstract class CaffeineBeverage{
final void prepareRecipe() { // 공통된 부분
boilWater(); // 해당 클래스에서 구현
brew(); // 서브클래스에서 구현
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilwater() {...}
void pourInCup() {...}
}
Concrete Class
// 추상 클래스를 상속받는다..
public class Tea extends CaffeineBeverage{
public void brew() {...} // 추상 메서드 구현
public void addCondiments() {...}
}
public class Coffee extends CaffeineBeverage{
public void brew() {...} // 추상 메서드 구현
public void addCondiments() {...}
}
추상클래스에서 선언되지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드로 다양한 용도로 사용이 가능하다.