☕️ 추상클래스와 인터페이스
이전 포스팅에서 추상클래스와 인터페이스에 대해서 다뤄봤다.
[Java] 추상 클래스(Abstract Class)
☕️ 추상클래스(Abstract Class)란? 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 즉, 반드시 사용되어야 하는 메
caffeineoverflow.tistory.com
[Java] 인터페이스(Interface)
☕️ 인터페이스(Interface)란? 인터페이스는 자바에서 클래스들이 구현해야 하는 동작을 지정하는 용도로 사용되는 추상 자료형이다. 인터페이스는 interface 키워드를 붙여 선언할 수 있으며, 기본
caffeineoverflow.tistory.com
얼핏 보면 추상클래스와 인터페이스 모두 추상 메서드를 가지며, 하위 클래스에서 구현한다는 점에서 차이의 모호함을 느꼈을 수도 있을 것이다. 그래서 이번 포스팅에서는 추상클래스와 인터페이스를 비교해보려고 한다.
☕️ 추상클래스와 인터페이스의 차이점
추상클래스와 인터페이스의 가장 큰 차이점은 사용용도에 있다. 흔히 추상클래스와 인터페이스를 아래와 같이 표현하기도 한다.
- 추상클래스 : 자식클래스 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 |