2020. 5. 1. 23:19ㆍProgramming Languages/Java
추상 메소드(abstract method)
선언은 되어 있으나 코드가 구현되어 있지 않은 메소드이다.
추상 메소드를 작성하려면 abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다.
public abstract String getName();
public abstract void setName(String s);
코드를 작성하면 추상 메소드가 될 수 없다.
추상 클래스가 되는 경우
1. 추상 메소드를 포함하는 클래스
absrtact class Shape { // 추상 클래스 선언
public Shape() {}
public void paint() { draw(); }
abstract public void draw(); // 추상 메소드 선언
}
추상 메소드를 포함하면 반드시 추상 클래스로 선언해야 한다.
2. 추상 메소드가 없지만 abstract로 선언한 클래스
abstract class MyCompenent { // 추상 클래스 선언
String name;
public void load(String name) {
this.name = name;
}
}
주의할 점
실행 코드가 없는 상태의 추상 메소드가 있을 수 있기 때문에 추상 클래스는 객체를 생성할 수 없다.
레퍼런스 변수를 선언하는 것은 상관없다.
추상 클래스의 상속
추상 클래스를 단순히 상속받는 서브 클래스는 추상 클래스가 된다. 추상 클래스의 추상 메소드를 그대로 상속받기 때문이다. 그러므로 서브 클래스에 abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 발생하지 않는다. 서브 클래스가 추상 클래스로 되지 않으려면 서브 클래스에서 슈퍼 클래스의 추상 메소드를 모두 오버라이딩하여 코드를 작성해야 한다.
추상 클래스의 구현 및 목적
슈퍼 클래스에 선언된 모든 추상 메소드를 서브 클래스에서 오버라이딩하여 실행 가능한 코드로 구현하는 것을 말한다.
그렇다면 추상 클래스와 기본 메소드 오버라이딩 둘 중 어느 것이 더 좋을까? 기능적으로 차이가 나는 것은 아니지만 추상 메소드를 활용하는 것이 좋다. 왜냐하면 기본 메소드 오버라이딩으로 한다면 서브 클래스에서 메소드 이름을 다르게 주어도 컴파일 오류가 나지 않는다. 하지만 추상 메소드를 오버라이딩할 때 슈퍼 클래스의 추상 메소드와 한 글자라도 틀리면 오류가 발생하기 때문에 오버라이딩을 보다 명료하게 할 수 있으며 다형성 또한 실현할 수 있다.
추상 클래스의 용도
추상 클래스를 책의 목차에 비유하면, 서브 클래스는 목차에 따라 작성된 장과 같다. 책을 쓸 때도 목차를 잡아놓고 쓰면 훨씬 쉽고 빠르며 방향이 흐트러지지 않는 것처럼 추상 클래스를 이용하면 응용프로그램의 설계와 구현을 분리할 수 있다. 추상 클래스로 기본 방향을 잡아놓고 서브 클래스에서 구현하면 구현 작업이 쉬워진다. 또한 추상 클래스는 계층적 상속 관계를 가지는 클래스들의 구조를 만들 때 적합하다.
'Programming Languages > Java' 카테고리의 다른 글
[Java] Equals and HashCode (0) | 2021.10.19 |
---|---|
[Java] Thread (0) | 2021.10.19 |
[Java] 메소드 오버라이딩(method overriding) (0) | 2020.04.27 |
[Java] 업캐스팅, 다운캐스팅, instanceof (0) | 2020.04.27 |
[Java] 상속과 생성자 (0) | 2020.04.21 |