Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Deep Dive
- 스프링부트
- 유효시간 설정 url
- api 요청 수 제한
- redis
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- concurrency limit
- invalid_grant
- 검색
- api 비동기처리
- this
- oauth
- 우아한테크코스
- TypeORM
- 프론트엔드 과제
- 파일 url
- compateto
- 프론트엔드
- 모던 자바스크립트
- 딥다이브
- 음악 url 파일 다운로드
- 자바스크립트
- bucket4j
- 프리코스
- 타입스크립트
- AWS
- 프로그래머스
- NestJS
- 우아한 테크코스
- Dev-Matching
Archives
- Today
- Total
개발 알다가도 모르겠네요
Template Method Pattern 을 알아보자 본문
728x90
전체적인 알고리즘을 구현하면서 상이한 부분은 하위 클래스에서 구현할 수 있도록 해 주는 패턴
전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다.
전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다.
Example - 여러 회사의 모터를 지원하자
엘리베이터 제어 시스템에서 모터를 구동시키는 기능
-HyundaiMotor 클래스: 모터를 제어하여 엘리베이터를 이동시키는 클래스
-Door 클래스: 문을 열거나 닫는 기능을 제공하는 클래스
- HyundaiMotor 클래스는 현대모터를 구동시킴.
- 만약 다른 회사의 모터를 제어해야 한다면? 예를 들어 LG모터를 구동시키려면?
move 메서드에서 공통적인 부분을 상위 클래스 Motor로 이동.
public abstract class Motor {
private Door door ;
private MotorStatus motorStatus ;
public Motor(Door door) {
this.door = door ;
motorStatus = MotorStatus.STOPPED ;
}
public MotorStatus getMotorStatus() { return motorStatus; }
private void setMotorStatus(MotorStatus motorStatus) {
this.motorStatus = motorStatus;
}
public void move(Direction direction) { // LGMotor와 HyundaiMotor의 move에서 공통만을 가짐
MotorStatus motorStatus = getMotorStatus() ;
if ( motorStatus == MotorStatus.MOVING ) return ;
DoorStatus doorStatus = door.getDoorStatus() ;
if ( doorStatus == DoorStatus.OPENED ) door.close() ;
moveMotor(direction) ; // 하위 클래스에서 override됨
setMotorStatus(MotorStatus.MOVING) ;
}
protected abstract void moveMotor(Direction direction) ;
}
'디자인패턴' 카테고리의 다른 글
Abstract Pattern 을 알아보자 (0) | 2021.12.19 |
---|---|
Factory Method Pattern 을 알아보자 (0) | 2021.12.17 |
Decorator Pattern 을 알아보자 (0) | 2021.12.14 |
Observer Pattern 을 알아보자 (0) | 2021.12.13 |
Strategy Pattern과 Command Pattern 비교 (0) | 2021.12.11 |