예를 들어서 상위 클래스를 피자라고 하고
하위 클래스가 콤비네이션피자, 고구마피자, 치즈피자 라고 하면
상위 클래스의 뼈대에 맞춰서 하위 클래스들을 생성하는 것이다
이를 의존성 주입이라고 볼 수 있다
조건
- 클래스는 추상(abstract)로 만든다
- 단계를 진행하는 메서드는 수정이 불가능 하도록 final 키워드를 추가한다
- 각 단계들은 외부는 막고, 자식들만 활용할 수 있도록 protected로 선언한다
예시로 피자를 만든다고 해보자
반죽 -> 토핑 -> 굽기 3단계로 나뉘어져 있고
이 단계는 항상 유지하며 순서가 바뀔일은 없다
도우에 따라 반죽이 달라질순 있겠지만 반죽과 굽기는 동일고
피자의 종류에 따라 토핑만 바꾼다고 가정하고 예를 들겠다
// 상위클래스
abstract class Pizza {
protected void 반죽() { System.out.println("반죽하기"); }
abstract void 토핑() {}
protected void 굽기() { System.out.println("굽기"); }
final void makePizza() { // 상속 받은 클래스에서 수정 불가
this.반죽();
this.토핑();
this.굽기();
}
}
// 하위클래스 Latte
class PotatoPizza extends Pizza {
@Override
void 토핑() {
System.out.println("고구마 넣기!");
}
}
class TomatoPizza extends Pizza {
@Override
void 토핑() {
System.out.println("토마토 넣기!");
}
}
그냥 쉽게 보면 부모 클래스를 추상클래스로 생성해서 자식 클래스들이 상속을 받고
오버라이드를 통해서 사용하면 부모 클래스를 계속 변경하지 않고 필요할 때마다
틀만 가지고 와서 자식 클래스에 맞게 사용하면 되는것이다
추가로 abstract와 interface의 차이를 보자면
abstract : 부모의 기능을 자식에서 확장시켜 나가고 싶을때 사용한다
interface : 해당 클래스가 가진 함수의 기능을 활용하고 싶을때 사용한다
'CS' 카테고리의 다른 글
| [CS] 전략 패턴 (0) | 2022.10.17 |
|---|---|
| [CS] 팩토리 메서드 패턴 (0) | 2022.10.15 |
| [CS] 라이브러리 VS 프레임워크 (0) | 2022.10.13 |
| [CS] 트랜잭션 (10분 테코톡) (0) | 2022.10.09 |
| [CS] 인증과 인가 (10분 테코톡) (0) | 2022.10.08 |