☕️ 추상클래스와 인터페이스
이전 포스팅에서 추상클래스와 인터페이스에 대해서 다뤄봤다.
얼핏 보면 추상클래스와 인터페이스 모두 추상 메서드를 가지며, 하위 클래스에서 구현한다는 점에서 차이의 모호함을 느꼈을 수도 있을 것이다. 그래서 이번 포스팅에서는 추상클래스와 인터페이스를 비교해보려고 한다.
☕️ 추상클래스와 인터페이스의 차이점
추상클래스와 인터페이스의 가장 큰 차이점은 사용용도에 있다. 흔히 추상클래스와 인터페이스를 아래와 같이 표현하기도 한다.
- 추상클래스 : 자식클래스 is kind of 부모클래스
- 인터페이스 : 자식클래스 is able to 부모인터페이스
추상클래스는 부모와 자식 관계에 명확한 계층 구조가 성립한다.
자식 클래스의 공통된 부분을 부모 클래스로 추출해 낸 것이며, 자식 클래스에서는 부모의 기능을 재사용하거나 필요에 따라 이를 확장시켜 사용할 수 있다.
반면, 인터페이스는 공통된 기능을 선언하고 필요한 클래스에서 이를 구현하게 할 수 있다.
만약 '박쥐' 클래스와 '독수리' 클래스에 fly()라는 메서드를 추가하고 싶다면, 추상클래스에 fly()를 선언함으로써 기능을 추가할 수 있을 것이다. 하지만 '사람' 클래스와 '펭귄' 클래스는 fly() 메서드가 불필요함에도 불구하고 구현을 강제받게 된다.
이럴 때 인터페이스 도입하여 공통된 fly()라는 메서드를 만들게 되면, 필요한 클래스에서만 이를 사용할 수 있게 된다.
이처럼 추상클래스는 계층 구조에서 공통된 속성들을 뽑아서 하나의 클래스로 만들고 자신의 기능들을 하위로 확장시키는 것으로 볼 수 있으며, 인터페이스는 계층 구조는 아니지만 같은 기능이 필요한 경우 사용하는 것으로 볼 수 있다.
또 다른 관점에서 봤을 때는 추상클래스는 상속받아서 기능을 확장시키는데 목적이 있고,
인터페이스는 구현 객체의 동일한 실행을 보장시키는데 목적이 있다.
References.
1. 코드 연구소 - [JAVA] 추상클래스와 인터페이스의 차이
2. 코등팩토리 - [Java] 추상클래스와 인터페이스의 공통점과 차이점
3. 99C0RN - [간단정리] JAVA - 추상클래스, 인터페이스 특징 및 차이점 확실히 기억하기
4. Inpa - 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
'Java' 카테고리의 다른 글
[Java] 제네릭(Generic) (0) | 2023.08.05 |
---|---|
[Java] 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2023.08.02 |
[Java] 인터페이스(Interface) (0) | 2023.07.27 |
[Java] 추상 클래스(Abstract Class) (0) | 2023.07.26 |
[Java] 래퍼 클래스(Wrapper Class)와 박싱(Boxing), 언박싱(Unboxing) (0) | 2023.07.25 |