[Java] 인터페이스와 추상 클래스 차이점

jjuny7712·2023년 12월 18일
0

인터페이스(Interface) vs 추상 클래스(Abstract Class)


(이미지: https://m.blog.naver.com/snoopy12oyk/220783834466)

비슷한 기능을 가진 인터페이스와 추상 클래스의 차이를 알아보자.

추상 메서드(Abstract Method)란?

선언은 되어있지만 코드가 구현되어 있지 않은 것을 의미한다. 즉, 빈 껍데기라 할 수 있다.

public abstract String getName();
--> 코드가 구현되어 있지 않으니까 추상메서드이다.

public abstract String getName(){
	return "hello";
}
--> 코드가 구현되어 있으므로 추상메서드가 아니다.

추상 클래스(Abstract Class)란?

추상 클래스를 사용하는 이유는 추상클래스를 상속받은 클래스는 추상 클래스 안에 있는 모든 추상 메서드를 구현해야 하기 때문이다. 하지만, 이렇게 설명한다면 추상 클래스와 인터페이스의 차이를 알기어렵다.

인터페이스의 구현체도 인터페이스의 모든 메서드를 구현해야 하는건 동일하기 때문이다.

그렇다면 무슨 차이가 있는거지?

1. 인터페이스안에 선언된 메서드는 모두 '추상 메서드'이지만, 추상 클래스안에 선언된 메서드는 '추상 메서드 + 일반 메서드' 2종류가 포함된다.

추상클래스는 상속을 받아서 기능을 확장하는 반면, 인터페이스는 설계도라고 생각하면 된다. 전체적인 틀을 잡고 이렇게 만들어야 한다는 규칙을 정하는데 중점을 두는 것이다.

  • 인터페이스 코드 예시
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){
    	// TODO: 기능 구현
 	}
    
    // 추상 메서드
   	abstract public void love(String who);
    abstract public void coding();
}

추상 클래스는 일반 메서드와 추상 메서드가 포함된다.

즉, 추상 클래스에 선언된 일반 메서드는 자식 클래스에서 재정의를 강제하지 않는다. (추상 메서드만 재정의가 강제된다)

2. 추상 클래스는 다중 상속이 불가능하다.

인터페이스는 인터페이스간에 extends로, 인터페이스 구현체에서는 implements로 다중 상속이 가능하지만, 추상 클래스는 단일 상속만 지원된다. (참고로 인터페이스와 추상 클래스는 둘다 인스턴스화 할 수 없다)

인터페이스와 추상 클래스가 인스턴스화 할 수 없는 이유는 뭐지?

인터페이스나 추상 클래스에는 추상 메서드 때문에 실행 코드가 없을 수도 있기 때문에 인스턴스화가 불가능한 것이다.

profile
차곡차곡

0개의 댓글