추상 클래스
업캐스팅과 다운캐스팅을 통해 객체를 좀 더 자유롭게, 특히 배열등으로 묶어서 관리할 수 있다. 이때 부모 클래스에서 미리 변수와 메소드를 선언해놓고, 이를 자식 클래스에서 메소드 오버라이딩을 통해서 각각 다르게 정의한다면, 업캐스팅을 통해 다룰 때 같은 메소드를 사용하여도 다른 메소드가 사용되므로 보다 유연하고 효율적으로 객체를 다룰 수 있다.
이때 부모 클래스는 자식 클래스를 유연하게 사용하기 위해서만 사용되므로 직접적으로 객체가 선언되서는 안되고, 클래스는 자식 클래스가 가질 기본적인 정보만을 담아야 한다. 이를 abstract
키워드를 이용하여 달성할 수 있다. abstract
키워드를 사용하여 클래스를 선언하면 추상 클래스를 만들어 직접적으로 해당 클래스를 사용하지 못하게 한다. 즉 업캐스팅을 통해서만 추상 클래스의 객체를 만들 수 있다.
고, 자식 클래스에서 구현해야지만 추상 메소드를 사용할 수 있다.
예를 들어 아래와 같은 클래스 관계가 있다고 가정하자.
abstract class Person {
protected String name;
protected void printInfo() {}
}
class Student extends Person {
public String id;
public void printInfo() {
System.out.println(name);
System.out.println(id);
}
public Student(String name, String id) {
this.name = name;
this.id = id;
}
}
class Professor extends Person {
public String major;
public void printInfo() {
System.out.println(name);
System.out.println(major);
}
public Professor(String name, String major) {
this.name = name;
this.major = major;
}
}
이제 아래와 같이 객체를 선언하고 사용할 수 있다.
public static void main(String[] args) {
Person p1 = new Student("Park", "20231123123");
Person p2 = new Professor("Lee", "CSE");
Person[] p = {p1, p2};
for (int i = 0; i < 2; i++) {
p[i].printInfo();
}
}
추상 메소드
자바에서 추상 메소드는 클래스 내에서 선언만 되고 구현되지 않은 메소드를 의미한다. 추상 메소드는 반드시 추상 클래스 내에 선언되어야 하며, 이 메소드를 상속받는 클래스는 추상 메소드를 반드시 구현해야 한다. 추상 메소드 선언은 추상 클래스 선언과 유사하게 abstract
키워드가 사용된다.
추상 메소드는 중괄호 대신 세미콜론으로 끝나며, 구현 부분이 없다. 즉 아래와 같다.
abstract protected void method_name(parameter);
추상 메소드가 선언되었다면 이 추상 메소드가 선언된 추상 클래스를 상속받는 클래스는 반드시 해당 추상 메소드를 오버라이드하여 구현해야만 한다. 즉 자식 클래스에서 구현해야지만 추상 메소드를 사용할 수 있다. 이를 통해 상속받는 클래스들이 반드시 특정 메소드를 구현하도록 강제할 수 있다.
'Language > Java' 카테고리의 다른 글
[Java] 예외(exception)와 예외 처리(exception handling) (0) | 2024.11.19 |
---|---|
[Java] 인터페이스(interface) 및 디폴트(default) 메소드와 정적(static) 메소드 (0) | 2024.11.16 |
[Java] 업캐스팅(upcasting)과 다운캐스팅(downcasting) (0) | 2024.11.12 |
[Java] 클래스 상속(inheritance) (0) | 2024.11.12 |
[Java] 접근 지정자(access modifier) (0) | 2024.11.11 |