반응형
SMALL
[1] 템플릿 메서드 패턴
(1) 템플릿 메서드
- 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
- final로 선언한 구현부는 하위 클래스에서 재정의 할 수 없게 함
- 프레임워크에서 많이 사용되는 설계 패턴
- 추상 클래스 : 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의 하고 하위 클래스에서 추상메서드로 재정의하여 다르게 구현하도록한다
(2) final 예약어
- final 변수 : 값이 변경될 수 없는 상수
- final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드
- final 클래스 : 상속할 수 없는 클래스
(3) 템플릿 메서드 사용 예시
- 상위클래스
- 추상클래스
- final 선언하여 run() 함수를 불러올때 구현되는 내용은 하위클래스에서 재정의할수없다
package ch10;
public abstract class Car {
public abstract void drive();
public abstract void stop();
public abstract void wiper();
public void starCar() {
System.out.println("자동차 시동on ");
}
public void turnOff() {
System.out.println("자동차 시동off ");
}
public void washCar() {} // 구현내용만 없고 메서드 정의만 했다. 추후 필요할때 내용을 overriding 하면된다
final public void run() { //작동순서는 변함이 없기떄문에 고정
starCar();
drive();
wiper();
stop();
turnOff();
washCar();
}
}
- 하위클래스
- 추상메서드 재정의
package ch10;
public class AICar extends Car {
@Override
public void drive() {
System.out.println("자율 주행을 시작합니다. ");
System.out.println("자동차가 스스로 핸들을 움직입니다. ");
}
@Override
public void stop() {
System.out.println("자동차가 스스로 장애물을 발견하여 정지합니다. ");
}
@Override
public void wiper() {
System.out.println("자동차가 스스로 비가 오는것을 알고 와이퍼를 움직입니다. ");
}
@Override
public void washCar() {
System.out.println("자동차가 자동세차모드로 시작합니다. ");
}
}
- 하위클래스
- 추상메서드 재정의
- 재정의되지 않은 추상메서드는 실행 클래스에서 실행명령이 내려져도 재정의 되지 않아 출력이 되지 않는다
package ch10;
public class ManualCar extends Car {
@Override
public void drive() {
System.out.println("운전자가 직접 운전합니다. ");
System.out.println("운전자가 직접 핸들을 움직입니다.");
}
@Override
public void stop() {
System.out.println("운전자가 장애물을 발견하여 정지합니다. ");
}
@Override
public void wiper() {
System.out.println("운전자가 비가 오는것을 확인하고 와이퍼를 움직입니다. ");
}
// washCar()를 재정의를 하지 않으면 CarTest에서 작동하지 않는다
}
- 실행 클래스
package ch10;
public class CarTest {
public static void main(String[] args) {
System.out.println("<<<<자율주행 운전>>>>>");
Car aiCar = new AICar();
aiCar.run();
System.out.println("<<<<직접 운전>>>>>");
Car mCar = new ManualCar();
mCar.run();
}
}
(4) 템플릿 메서드 패턴- 메서드 호출하기
- 클래스에 final 예약어로 상수값을 정의한다
public class Define {
public static final int MIN = 1;
public static final int MAX = 999999;
public static final double PI = 3.14;
public static final String GREETING = "Good Morning!";
public static final int MATH_CODE = 1001;
public static final int CHEMISTRY_CODE = 1002;
}
- 추상 메서드 호출하는 방법
public class UsingDefine {
public static void main(String[] args) {
System.out.println(Define.GREETING);
System.out.println(Define.MIN);
System.out.println(Define.MAX);
System.out.println(Define.MATH_CODE);
System.out.println(Define.CHEMISTRY_CODE);
System.out.println("원주률은" + Define.PI + "입니다.");
}
}
반응형
LIST
'🌈 백엔드 > 객체 지향' 카테고리의 다른 글
JAVA_객체지향_오버로딩 & 오버라이딩 (0) | 2023.06.18 |
---|---|
JAVA_객체지향_상속 & super (0) | 2023.06.18 |
JAVA_객체지향_디자인 > 싱글톤 패턴 (0) | 2023.06.03 |
JAVA_객체지향_this (0) | 2023.06.03 |
JAVA_객체지향_접근제어 지시자 & 캡슐화 (0) | 2023.06.03 |