추상 클래스와 인터페이스의 차이에 대해 설명해주세요.
1. 추상메소드와 추상클래스
추상 메소드는 빈 껍데기이다. 추상메소드란 선언은 되어 있으나 코드가 구현되지 않은 것을 말한다.
//추상 메소드
public abstract String getName();
//추상 메소드가 아님. why? 코드가 구현되어 있기 때문에!
public abstract String getName() {
return "hello";
}
추상 클래스를 사용하는 이유 :
추상 클래스를 상속받은 클래스는 추상 클래스 안에 있는 모든 추상 메소드를 구현해야 한다.
위 설명만 들으면 인터페이스와 추상 클래스가 같다고 느낄 수 있다. 인터페이스도 인터페이스 안에 있는 모든 추상메소드를 구현해야하기 때문이다.
2. 인터페이스 vs 추상클래스
인터페이스 안에 선언한 메소드는 모두 추상메소드인 것에 비해, 추상 클래스 안의 메소드는 일반 메소드도 있다.
둘다 추상메소드를 구현한다는 점에서 동일한 기능을 한다. 그러면 왜 추상클래스 안에 추상메소드만을 두면 될텐데 굳이 인터페이스 라는 개념을 만든 이유는 무엇일까?
그것은 바로 인터페이스와 추상클래스의 목적이 다르기 때문이다.
추상클래스의 목적은 상속을 받아 기능을 확장하는 것이다. 반면, 인터페이스는 함수의 구현을 강제하기 위해서 존재한다. 그래서 함수의 빈껍데기만 갖고 있다. 인터페이스를 통해 설계도처럼 전체적인 틀을 잡을 수 있다.
추상클래스는 인스턴스를 생성할 수 없다. 왜냐하면 추상클래스 내 추상메소드에 실행코드가 없을 수 있기 때문이다.
따라서, 추상클래스를 상속받은 클래스로 인스턴스를 생성해야만 한다.
3. 예제 코드
public class abstract_example {
//인터페이스
interface human {
abstract public void eat(int food);
abstract public void love(String who);
abstract public String coding();
}
//추상클래스
abstract class cat {
//일반 메소드
public void eat(int food) {
}
//추상메소드
abstract public void love(String who);
abstract public String coding();
}
class robot extends cat {
@Override
public void love(String who) {
//기능구현
}
@Override
public String coding() {
//기능구현
}
}
public static void main(String[] args) {
cat a = new cat(); //잘못된 코드
//추상클래스는 인스턴스를 생성할 수 없다.
//why? 추상클래스 내 추상메소드 때문에 실행코드가 없을 수 있기 때문이다.
//따라서 상속받은 클래스를 사용해야만 한다.
robot r = new robot(); //올바른 코드
}
}
출처 : https://www.youtube.com/watch?v=ZXV4XxKFK1A
'Programming > Java' 카테고리의 다른 글
package-info.java란 (0) | 2023.07.02 |
---|---|
JPA Entity의 equals와 hashCode (0) | 2022.08.08 |
Optional (0) | 2022.07.01 |
컨트롤러는 상태를 가지면 안된다. (0) | 2022.03.03 |