추상 클래스는 추상 메서드를 포함한 클래스이다.
추상메서드란?
- 구현 코드가 없이 선언부만 있는 메서드
- abstract 예약어를 사용한다.
- 추상클래스는 new(인스턴스화)할 수 없다.
public class Computer {
public void display(){} //추상메서드가 아님
public void typing(); //추상메서드임 하지만 이대로는 에러가 발생.
}
사용 방법
public abstract class Computer {
public abstract void display();
public abstract void typing();
}
추상클래스는 주로 상속의 상위클래스를 위해 사용된다. 하위클래스에서 반드시 구현해야하는 메서드이지만 상위클래스는 그 선언이 모호할때 사용.
하나의 추상 메서드라도 하위클래스에서 오버라이딩 해주지 않는다면 하위클래스도 추상클래스가 되어야 한다. (모든 메서드가 구현되었다고 해도 추상클래스로 선언할 수는 있다.)
템플릿 메서드
- 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를 정의 해놓은 메서드
- final로 선언하여 재정의 할 수 없게 함.
템플릿 메서드 패턴: 디자인 패턴의 일종으로 프레임 워크에서 많이 사용되는 설계 패턴이다. 추상 클래스로 선언된 상위 클래스에서 추상 메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임한다. 하위 클래스가 다른 구현을 했다고 해도 템플릿 메서드에 정의된 시나리오 대로 수행된다.
템플릿 메서드 구현
public abstract class Car {
public abstract void dirve();
public abstract void stop();
public void startCar(){
System.out.println("시동을 켭니다.");
}
public void turnOff(){
System.out.println("시동을 끕니다.");
}
//템플릿 메서드 (함수가 재정의 되어선 안되기 때문에 final 키워드를 넣는다.)
final public void run(){
startCar();
dirve();
stop();
turnOff();
}
}
final 예약어
final 변수는 값이 변경될 수 없는 상수이다. (ex: public static final double PI = 3.14;)
final 메서드는 하위 클래스에서 오버라이딩 할 수 없다.
final 클래스는 더이상 상속되지 않는다.
프로젝트 구현시에 여러 파일에서 공유해야 하는 상수 값은 하나의 파일에 선언하여 사용하면 편리하다.
템플릿 메서드 (연습하기)
Player가 있고 이 Player가 게임을 합니다. 게임에서 Player가 가지는 레벨에 따라 run(), jump(), turn() 세 가지 기능을 할 수 있습니다 .각 레벨에 따라 기능 가능 여부가 다음과 같습니다.
초보자 레벨: 천천히 달립니다. (run() 가능)
중급자 레벨: 빨리 달리고 (run() 가능), 높이 점프(jump() 가능) 할 수 있습니다.
상급자 레벨: 아주 빨리 달리고 (run() 가능), 아주 높이 점프(jump() 가능)하고 한바귀 돌 수 있습니다. (turn() 가능)
플레이어는 go()명령어를 받으면 이 세가지 기능을 수행합니다. 이 중 할 수 없는것은 할 수 없다는 메시지를 보냅니다.
if문 전혀 쓰지않고 객체지향으로 짜기
'공부 > 자바 (Java)' 카테고리의 다른 글
[Java] Object 클래스 & Class 클래스 - toString(), equals(), hashCode(), clone(), forName() (0) | 2021.12.29 |
---|---|
[Java] 인터페이스, 추상클래스 인터페이스 차이 (0) | 2021.12.27 |
[Java] 상속(Inheritance), 메서드 오버라이딩, 다형성, 다운캐스팅, 업캐스팅 (0) | 2021.12.21 |
[Java] 싱글톤 패턴 (Singleton Pattern) -static (0) | 2021.12.08 |
[Java] static 변수, static메소드(클래스 메소드), 인스턴스 변수, 인스턴스 메소드 (0) | 2021.12.08 |
댓글