추상 클래스
- abstract 예약어를 사용
- 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
- 추상 클래스는 new 할 수 없음 ( 인스턴스화 할 수 없음 )
- 추상 클래스를 상속 받는 클래스는 추상 메서드를 무조건 오버라이딩 해야한다.
public abstract class 클래스명{
public abstract void 메서드이름 ();
}
💡추상클래스가 필요한이유??
객체생성이 목적이 아니라 자식을 생성하기 위해 만들어졌다.
코드의 독립성과 일관성을 유지 할 수 있다.
- 추상메서드에는 본체가 없다. ( 중괄호 없음 { } ) : 자식이 오버라이딩 해서 내용을 입력한다.
- 무조건 자식이 오버라이딩하여 메서드의 본체를 완성하게된다. 때문에 객체의 다양성을 볼 수 있다.
템플릿 메서드
- 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드이다.
- final로 선언하여 하위 클래스에서 재정의 할 수 없게 한다.
- 프레임워크에서 많이 사용되는 설계 패턴
- 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함
public abstract class Car {
public abstract void drive();
public abstract void stop();
public void startCar() {
System.out.println("시동을 켭니다.");
}
public void turnOff() {
System.out.println("시동을 끕니다.");
}
final public void run() {
startCar();
drive();
stop();
turnOff();
}
}
💡final 예약어
변경이 불가능하게 만들어줌
- final 변수 : 값이 변경될 수 없는 상수
- final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드
- final 클래스 : 상속할 수 없는 클래스
※ 공동으로 사용하는 상수 값을 정의하고 사용할 수 있다.
📑Define.java
public class Define {
public static final int MIN = 1;
public static final int MAX = 999999;
public static final double PI = 3.14;
public static final String GREETING = "Good Morning!";
public static final int MATH_CODE = 1001;
public static final int CHEMISTRY_CODE = 1002;
}
📑UsingDefine.java
public class UsingDefine {
public static void main(String[] args) {
System.out.println(Define.GREETING);
System.out.println(Define.MIN);
System.out.println(Define.MAX);
System.out.println(Define.MATH_CODE);
System.out.println(Define.CHEMISTRY_CODE);
System.out.println("원주률은" + Define.PI + "입니다.");
}
}
'BackEnd > JavaProgram' 카테고리의 다른 글
[ Java ] 자료구조 (1) | 2023.08.17 |
---|---|
[ JAVA ] 인터페이스 ( interface ) (0) | 2023.03.17 |
디자인 패턴 (0) | 2023.02.23 |
[ JAVA ] 객체 지향 / Extends 객체 간의 상속 관계 (0) | 2023.02.23 |
[ JAVA ] 자바 배열 문법 3 / 배열 메서드 ( Arrays ...) (0) | 2023.02.01 |