Java

추상 클래스와 인터페이스

dev-rootable 2023. 9. 13. 20:19

📌 추상 클래스란

 

추상 클래스는 클래스 내 추상 메서드가 하나 이상 포함되거나 abstract로 선언된 클래스를 말한다. 추상 메서드는 자손 클래스에서 완성해야 하는 메서드로 확장, 이용의 개념으로 볼 수 있다. 그래서 추상 클래스는 미완성 설계도라고도 표현한다.

 

상속을 위한 클래스이므로, 객체를 생성할 수 없다.

 

추상 클래스는 자손 클래스에서의 확장을 전제로 한 미완성 설계도

 

📌 인터페이스란

 

추상 메서드 또는 상수만으로 구성된 클래스(Java 8부터는 static 메서드와 default 메서드도 포함)로, 마찬가지로 추상 메서드는 자손(구현) 클래스에서 완성해야 하는 메서드다. 그래서 인터페이스는 기본 설계도라고 할 수 있으며, 중요 특징으로 다중 상속(구현)이 가능하다.

 

인터페이스는 다중 상속이 가능한 기본 설계도

 

📌 차이점

 

🔎 구성 요소

 

무엇보다 외적으로 차이가 있다. 추상 클래스는 'abstract class 클래스이름' 식으로 선언한다. 반면 인터페이스는 'interface 인터페이스이름' 식으로 선언한다.

 

구성 내용도 다르다. 추상 클래스는 인스턴스나 클래스 변수, 추상 메서드 등 자유롭게 포함하지만 인터페이스는 앞서 언급한 것처럼 포함될 수 있는 대상이 한정되어 있다.

 

🔎 개념

 

추상 클래스는 IS-A, 인터페이스는 HAS-A

 

추상 클래스IS-A의 개념으로 볼 수 있다. 즉 "~이다"의 개념이다. 그 이유는 상속을 전제로 생성된 클래스이기 때문이다.

 

예를 들어 추상 클래스가 "vehicle(탈 것)"이고, 자손 클래스로 car, bicycle, boat 등이 있다면 다음과 같이 말할 수 있다.

 

A car/bicycle/boat is vehicle

 

이처럼 추상 클래스는 해당 클래스가 어떤 종류의 또는 성격의 클래스인지 그 정체가 된다.

 

인터페이스HAS-A의 개념으로 볼 수 있다. 즉 "~를 할 수 있는" 또는 "~을 가지는"의 개념이다.

 

예를 들어 일반 클래스인 robot이 있을 때, 인터페이스로 movable, rechargeable 이 있다고 하자. 여기서 robot이 두 인터페이스를 구현한다면 이렇게 된다.

 

A robot has movable/rechargeable (function)

 

이처럼 robot은 움직일 수 있고, 충전할 수 있는 기능이 추가, 탑재된 것이다.

 

🔎 상속

 

추상 클래스나 인터페이스 모두 추상 메서드의 구현을 강제하는 것은 동일하다.

 

추상 클래스 상속을 강제하기 때문에 상속이 가진 이점을 그대로 누린다. 여러 클래스가 공통적인 필드와 메서드들을 그대로 사용할 수 있는 것이다. 애플리케이션은 객체들간의 관계를 잘 파악할 수 있어야 가독성이 좋기 때문에 이러한 구조는 도움이 된다. 즉, 공통 필드와 메서드를 여러 클래스에서 쓰고 싶을 때 사용하면 좋을 것이다.

 

인터페이스와 추상 클래스의 가장 큰 차이는 상속이라고 생각한다. 상속 구조가 아닌 인터페이스는 클래스 간의 종속성이 약하고, 구조가 더 단순하다. 그리고 인터페이스를 사용하면 런타임 때 관계가 결정되므로 더욱 동적인 코드를 작성할 수 있다. 이처럼 상속을 사용하지 않으면서 누리는 장점과 다형성을 활용하고 싶을 때 인터페이스를 사용하면 좋을 것 같다.

 

References:

 

https://myjamong.tistory.com/150

 

[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽

추상클래스 인터페이스 왜... 사용할까? 우리는 추상클래스와 인터페이스에 대해서 알고 있냐고 누가 물어본다면 알고 있다고 대답을 하고있습니다. 그런데 이론적인 내용 말고 정작 "왜 사용하

myjamong.tistory.com

 

https://brunch.co.kr/@kd4/6

 

자바의 추상 클래스와 인터페이스

추상 클래스와 인터페이스의 차이 | 추상 클래스(Abstract class)와 인터페이스(Interface)의 차이 및 존재 이유를 설명해주세요. 클래스는 크게 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는

brunch.co.kr