-
추상 메소드: abstract 예약어를 사용하여 선언만 하는 메소드. 구현 코드, 즉 함수 몸체가 없는 메소드.
템플릿 메소드: 실행 순서(시나리오)를 정의한 메소드로 바뀔 수 없음. final 사용으로 하위 클래스에서 재정의 불가.
final 예약어
변수 상수를 의미(변하지 않는 수)
*여러 파일에서 공유하는 상수는 public static final로 선언하여 사용메소드 final 메소드는 하위 클래스에서 재정의 불가 클래스 상속 불가 Car 수상 클래스를 상속받는 Sonata, Avante, Grandeur, Genesis 클래스는 주행하기 위해 start-drive-stop-turnoff의 순서로 움직인다. 위 순서를 run() 템플릿 메소드로 구현하고 결과를 출력하도록 클래스 구현.
+)washCar 메소드 추가해 구현
1234567891011121314151617public abstract class Car {public abstract void start();public abstract void drive();public abstract void stop();public abstract void turnoff();public void washCar() {System.out.println("세차를 합니다.");};final public void run() {start();drive();stop();turnoff();washCar();}}cs final 예약어를 이용해 고정된 템플릿 메소드 만들기. 다른 메소드의 경우 앞에 차종이 나오도록 되어 있으나 washCar 메소드의 경우 "세차를 합니다."라는 메세지만 나오면 되므로 추상 메소드가 아닌 일반 메소드로 구현.
12345678910111213141516public class CarTest {public static void main(String[] args) {ArrayList<Car> carList = new ArrayList<Car>();carList.add(new Sonata());carList.add(new Grandeur());carList.add(new Avante());carList.add(new Genesis());for(Car car: carList) {car.run();System.out.println("===================");}}}cs 각 차종 클래스는 extends 예약어로 템플릿 불러와서 프린트만 해주면 되므로 생략.
출력할 때는 ArrayList 활용해서 새 인스턴스로 차종 넣고 출력.
템플릿 메소드를 사용하면 어떤 순서로 메소드를 만들고 활용하면 되는지 직관적으로 확인할 수 있어서 편리하다.
'혼자 있는 방 > Java' 카테고리의 다른 글
자바 라이브러리 (0) 2021.06.07 인터페이스(interface) (0) 2021.06.03 상속과 다형성(inheritance&polymorphism) (0) 2021.06.02 객체 배열 (1) 2021.05.30 객체 간 협력 (0) 2021.05.30 댓글