본문 바로가기
정리하기 이전 자료 ( before 20-11 )/Java

추상클래스 & 템플릿 메서드

by IMSfromSeoul 2020. 3. 30.

추상클래스(abstract class)

public abstract class Tv {
    public abstract void show();
  }

- 선언은 상위클래스에 하고, 구현의 책임을 하위클래스에 위임하는 형태.

 

- 추상 메소드를 하나라도 포함하는 class는 추상 클래스이다. 추상 클래스는 인스턴스 생성이 불가능하다.( 추상 메소드 = body가 없는 메소드 )

 

- 메소드가 전부 구현돼있더라도, abstract가 포함돼있다면 추상클래스이다. 

      : 상속을 하기 위한, 기반이 되는 클래스에 abstract 를 붙인다.

 

abstract class Computer{
    public abstract void message();
    public void turnOn(){
        System.out.println("켠다");
    }
}
class NoteBook extends Computer{
    @Override
    public void message(){
        System.out.println("노트북");
    }
}
class Desktop extends Computer{
    @Override
    public void message() {
        System.out.println("데스크탑");
    }
}

public class AbstractTest {
    public static void main(String args[]){
        Computer computerNoteBook = new NoteBook();
        Computer computerDesktop = new Desktop();

        AbstractTest test = new AbstractTest();

        test.method(computerDesktop);
        test.method(computerNoteBook);

    }
    public void method(Computer computer){
        computer.message();
    }
}

출력결과:

데스크탑
노트북

 추상클래스의 장점은 위의 코드와 같이 다형성을 잘 이용할 수 있다는 데 있다. 

 

템플릿 메서드(Template method)

 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 설계해놨다.

※ 템플릿 메서드 패턴 : 프레임 워크에서 자주 사용되는 패턴. 전체 구현의 흐름은 미리 정해놓고, 구체적 메서드 구현만 하위 클래스에 위임해놓는 형태.

 

Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. – GoF Design Patterns
abstract class Car1{
    public abstract void drive();
    public void stop(){
        System.out.println("멈춘다");
    };
    public void start(){
        System.out.println("부릉부릉");
    };

    final public void run(){
        start();
        drive();
        stop();
    }
}
class AiCar extends Car1{
    @Override
    public void drive() {
        System.out.println("달려볼까?");
    }
}
public class Test {
    public static void main(String args[]){
        Car1 car = new AiCar();
        car.run();
    }
}

출력결과:

부릉부릉
달려볼까?
멈춘다

 차의 주행은 엄격하게 순서가 지켜져야 한다. 이와 같이 하위클래스에서 건들면 안되는 메서드에 대해서 final 로 선언해서 순서를 따르게 하는 형태를 템플릿 메서드라고 한다.

'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글

Naming Conventions  (0) 2020.04.06
인터페이스  (0) 2020.03.30
DownCasting & instance of  (0) 2020.03.29
상속에서의 생성자  (0) 2020.03.29
다형성 , 상속, 가상함수 , 동적바인딩  (0) 2020.03.28

댓글