• 추상 클래스(abstract class)

    2021. 6. 2.

    by. 와트

    추상 메소드: abstract 예약어를 사용하여 선언만 하는 메소드. 구현 코드, 즉 함수 몸체가 없는 메소드.

    템플릿 메소드: 실행 순서(시나리오)를 정의한 메소드로 바뀔 수 없음. final 사용으로 하위 클래스에서 재정의 불가. 

    final 예약어

    변수 상수를 의미(변하지 않는 수)
    *여러 파일에서 공유하는 상수는 public static final로 선언하여 사용
    메소드 final 메소드는 하위 클래스에서 재정의 불가
    클래스 상속 불가

     

     

    Car 수상 클래스를 상속받는 Sonata, Avante, Grandeur, Genesis 클래스는 주행하기 위해 start-drive-stop-turnoff의 순서로 움직인다. 위 순서를 run() 템플릿 메소드로 구현하고 결과를 출력하도록 클래스 구현.

    +)washCar 메소드 추가해 구현

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public 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 메소드의 경우 "세차를 합니다."라는 메세지만 나오면 되므로 추상 메소드가 아닌 일반 메소드로 구현.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public 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

    댓글

Designed by Nana