반응형
33. 추상클래스란
| 추상 클래스
추상 메서드를 포함한 클래스
추상메서드
-구현 코드 없이 선언부만 있는 메서드
abstract 예약어 사용
추상 클래스는 new( 인스턴스화) 할 수 없음.
cf) concrete class
| 추상 클래스 구현
- 메서드와 클래스에 abstract 키워드를 사용.
- 추상 메서드가 포함된 클래스는 추상 클래스로 선언
- 모든 메서드가 구현되었다고 해도 클래스에 abstract 키워드를 사용하면 추상 클래스
| 추상 클래스
추상 클래스는 주로 상속의 상위 클래스로 사용됨
추상 메소드: 하위 클래스가 구현해야하는 메서드
구현된 메소드 : 하위 클래스가 공통으로 사용하는 기능의 메서드, 하위 클래스에 따라 재정의할 수 있다.
package abstractex;
public class ComputerTest {
public static void main(String[] args) {
// Computer computer = new Computer();
Computer computer = new DeskTop();
computer.display();
computer.turnOff();
Computer computer1 = new MyNoteBook();
computer1.display();
computer1.turnOff();
}
}
package abstractex;
public abstract class NoteBook extends Computer {
@Override
public void typing() {
System.out.println("notebook typing");
}
}
package abstractex;
public class MyNoteBook extends NoteBook {
@Override
public void display() {
System.out.println("My notebook typing");
}
}
package abstractex;
public class DeskTop extends Computer {
@Override
public void display() {
System.out.println("desktop display");
}
@Override
public void typing() {
System.out.println("desktop typing");
}
public void turnOff() {
System.out.println("desktop turn off");
}
}
package abstractex;
public abstract class Computer {
public abstract void display(); //바디가 없는 추상메서드-> 하위클래스에서 구현될 예정
public abstract void typing();
public void turnOn() {
System.out.println("전원 킴");
}
public void turnOff() {
System.out.println("전원 끔");
}
}
34. 추상클래스 응용 - 템플릿 메서드
| 템플릿 메서드
템플릿: 틀이나 견본을 의미한다.
템플릿 메서드: 추상 메서드나 구현된 메서드를 활용하여, 전체 흐름( 시나리오)를 정의해놓은 메서드
final로 선언하여 재정의할 수 없게함.
템플릿 메서드 패턴:
디자인 패턴의 일종
프레임워크에서 많이 사용되는 설계패턴
추상클래스로 선언된 상위 클래스에서 추상메서드를 이용하여 전체 구현의 흐름을 정의하고, 구체적인 각 메서드 구현은 하위 클래스에 위임함
하위 클래스가 다른 구현을 했다고 해서 템플릿 메서드에 정의된 메서드대로 수행하면 된다.
package template;
public class CarTest {
public static void main(String[] args) {
Car aiCar = new AICar();
aiCar.run();
System.out.println("==========");
Car manualCar = new ManualCar();
manualCar.run();
/*
* 시동을 켭니다. 자율주행 입니다 자율주행차가 스스로 방향을 바꿉니다. 스스로 멈춤! 시동을 켭니다. 시동을 켭니다. 사람이 조작합니다
* 사람이 직접 방향을 바꿉니다. 사람이 차를 멈춤! 시동을 켭니다.
*
*
*/
}
}
package template;
public abstract class Car {
public abstract void drive();
public abstract void stop();
public void startCar() {
System.out.println("시동을 켭니다.");
}
public void turnOff() {
System.out.println("시동을 끕니다.");
}
public void washCar() {
// 훅메서드: 자식이 재정의하면 세척됨
//구현의 확장성 추가
}
final public void run() {
// final: 재정의 하면 안되는 함수에 붙이기, 하위 클래스에서 시나리오를 바꾸면 안된다.
startCar();
drive();
stop();
startCar();
washCar();
}
}
package template;
public class AICar extends Car {
@Override
public void drive() {
System.out.println("자율주행 입니다");
System.out.println("자율주행차가 스스로 방향을 바꿉니다.");
}
@Override
public void stop() {
System.out.println("스스로 멈춤!");
}
public void washCar() {
System.out.println("스스로 세차!");
}
}
package template;
public class ManualCar extends Car{
@Override
public void drive() {
System.out.println("사람이 조작합니다");
System.out.println("사람이 직접 방향을 바꿉니다.");
}
@Override
public void stop() {
System.out.println("사람이 차를 멈춤!");
}
}
자바 인강이 듣고 싶다면 => https://bit.ly/3ilMbIO
반응형
'스프링, 자바' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 29회차 미션 (0) | 2020.09.07 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 28회차 미션 (0) | 2020.09.06 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 26회차 미션 (0) | 2020.09.04 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 25회차 미션 (0) | 2020.09.03 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 24회차 미션 (0) | 2020.09.02 |