추상 클래스와 인터페이스의 주요 차이점은 무엇인가??

초월차선·2023년 2월 26일

Java

목록 보기
9/14
post-thumbnail

추상 클래스와 인터페이스는 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다는 공통점이 있다. 그렇다면 추상 클래스 하나만 존재하되, 추상 클래스 안에 추상 메서드를 여러 개 두거나 혹은 전부 추상 메서드만 두면 되는데, 왜 인터페이스가 존재할까?

형태 차이:

인터페이스가 가질 수 있는 것들-->
1. 멤버변수를 가질 수 없고, staic final 상수만 가질 수 있음.
2. default로 생성된 body를 가진 메서드를 가질 수 있음.

public interface Test{}

추상클래스가 가질 수 있는 것들-->
1. 멤버변수를 가질 수 있음.
2. 일반 메서드와 추상메서드를 둘 다 가질 수 있음.

public abstract class Test{}

존재 목적 차이:

추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는 데 있다. 반면에 인터페이스는 함수의 껍데기만 있는데, 그 이유는 그 함수의 구현을 강제하기 위해서이다. 구현을 강제함으로써 구현 객체의 같은 동작을 보장 할 수 있다.비유적으로 표현하자면, 추상클래스는 미완성 설계도, 인터페이스는 기본 설계도라고 할 수 있다.
그러면, 인터페이스가 있는데, 추상클래스가 필요한 이유는 뭘까? 만약 모든 클래스가 인터페이스를 사용해서 기본틀을 구성한다면..공통으로 필요한 기능들도 모든 클래스에서 오버라이딩하여 재정의 해야하는 번거로움이 있다. 이렇게 공통된 기능이 필요하다면 추상클래스를 이용해서 일반 메서드를 작성하여 자식 클래스에서 사용할 수 있도록 하면 된다.

꼬리질문:
1. 추상클래스가 추상클래스를 상속받으면, 상속받는 추상클래스도 구현이 강제될까?
A: 상속은 가능하며, 구현이 강제되지는 않고 선택사항이다. 즉, 추상클래스를 상속받은 추상클래스를 한번더 클래스가 상속받아서 구현을 해야하는 것이다. 추상클래스가 추상클래스를 상속 받는다고, 상속받은 추상클래스에 꼭 구현이 강제되는 것이아니다.

0개의 댓글