추상 매서드(Abstract method) : 구현 코드 없이 매서드의 선언만 있는 것을 의미한다.
ex) int add(int x, int y);
위에서 설명한 추상 매서드를 가진 클래스를 추상 클래스라고 하며 추상 매서드는 하위 클래스가 상속하여 구현한다.
추상 매서드를 가진 클래스는 무조건 추상 클래스로 만들어야한다.
추상 클래스를 상속받은 하위 클래스는 상위 클래스와 같게 추상 클래스로 만들던가, 상위 클래스의 추상 매서드를 재정의(Overriding)하던가 해야한다.
(상위 클래스에 2개의 추상 매서드가 있는데 하위 클래스에서 1개의 매서드만 재정의하고 싶다면 하위 클래스도 추상 클래스로 만들어야한다.)
즉, 모든 상위 클래스의 추상 매서드를 재정의할 것이 아니라면 하위 클래스도 추상 클래스로 만들어야한다.
상위 클래스의 추상 매서드를 다 재정의 하였어도 해당 하위클래스를 추상 클래스로 지정할 수도 있다.
추상 method, class는 diagram에서 글을 비스듬하게 표현한다.
ex) Computer, display()
추상 클래스는 new를 통해 새로운 인스턴스를 생성할 수 없다.
추상 클래스는 상속만을 하기 위해 만드는 클래스이다.
Computer.java
package ch09;
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다..");
}
}
Desktop.java
package ch09;
public class Desktop extends Computer {
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("Desktop display");
}
@Override
public void typing() {
// TODO Auto-generated method stub
System.out.println("Desktop typing");
}
}
Computer.java
package ch09;
public class ComputerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Computer desktop = new Computer();
// 추상 class는 new를 통해 새로운 instance를 만들 수 없다.
Computer desktop = new Desktop();
desktop.display();
desktop.typing();
}
}
템플릿 메서드는 추상 메서드나 구현 된 메서드를 활용하여 코드의 시나리오를 정의하는 메서드이다.
프레임워크에서 많이 사용되는 설계 패턴이다.
추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의 하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 한다.
즉, 추상클래스에서 공통으로 사용될 메서드만 구현을 해두고 그렇지 않은 메서드들은 추상 메서드로 생성해둔다. 또한 공통으로 사용하려고 만든 메서드도 하위 클래스에서 필요에 따라 재정의를 할 수 있다.
구현한 메서드들 중에서 변경되면 안되는 메서드는 final로 생성한다.
Final 예약어
final variable : 값이 변경될 수 없는 상수
final method : 하위 클래스에서 재정의 할 수 없는 메서드
final class : 상속할 수 없는 클래스