인터페이스 VS 추상클래스
추상클래스 (is kind of)
-
추상클래스는 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스
-
추상클래스는 다중 상속이 불가능하여 단일 상속만 허용한다.
-
추상클래스는 추상 메소드 외에 일반클래스와 같이 일반적인 필드, 메서드, 생성자를 가질수 있다.
-
이러한 특징으로, 추상클래스는 추상화(추상 메서드)를 하면서 중복되는 클래스 멤버들을 통합 및 확장을 할 수 있다.
-
같은 추상화인 인터페이스와 다른점은, 추상클래스는 클래스간의 연관 관계를 구축하는 것에 초점을 둔다.
추상클래스의 활용
-
공통 멤버의 통합으로 중복을 제거 가능
-
구현의 강제성을 통한 기능 보장
-
규격에 맞는 설계 구현
-
인터페이스 (be Able to)
-
내부의 모든 메서드는 public abstract 로 정의 (default 메소드 제외)
-
내부의 모든 필드는 public static final 상수
-
클래스에 다중 구현 지원.
-
인터페이스 끼리는 다중 상속 지원.
-
인터페이스에도 static, default, private 제어자를 붙여 클래스 같이 구체적인 메서드를 가질 수 있음. 따라서 하위 멤버의 중복 메서드 통합을 어느정도 할수는 있겠지만, 필드는 상수이기 때문에 중복 필드 통합은 불가능
-
인터페이스는 부모 자식 관계인 상속에 얽매이지 않고, 공통 기능이 필요할 때마다 추상 메서드를 정의해놓고 구현(implement)하는 식으로 추상클래스보다 자유롭게 붙였다 땟다 사용
-
인터페이스는 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하는 것에 초점
-
다중 구현이 된다는 점을 이용해, 내부 멤버가 없는 빈 껍데기 인터페이스를 선언하여 마커 인터페이스 로서 이용 가능
-
보통 xxxable 이런 형식으로 인터페이스 네이밍 규칙을 따름
인터페이스의 활용
-
인터페이스의 다형성
-
형제 관계를 맺어줌
-
타입 접근 제한
-
메서드 접근 제한
-
-
의존성을 제거
- 인터페이스 타입으로 통신
-
표준화
- 개발 시간을 단축
- 나중에 변경이 용이
-
마커 인터페이스
-
마커 인터페이스는 일반적인 인터페이스와 동일하지만 사실상 아무 메소드도 선언하지 않은 빈 껍데기 인터페이스를 말한다
(EX : Serializable, Cloneable이 있다)
-
-
추상클래스 VS 인터페이스 차이점 요약
| 추상 클래스(Abstract Class) | 인터페이스(Interface) |
|---|---|
| 상속하여 공통된 기능을 만들고, 확장하기 위함 | 구현하는 객체들이 같은 동작을 보장하기 위함 |
| 다중상속 불가능 | 다중상속 가능 |
| 생성자와 일반변수 모두 가질 수 있다. | 생성자와 일반변수를 가질 수 없다. |
| 메서드를 부분적으로 구현할 수 있다. | 메서드 선언만 가능하다. |
| extends 키워드를 사용한다. | implements 키워드를 사용한다. |
이해를 위한 그림

-정리-
- 인터페이스 : implements 라는 키워드처럼 인터페이스에 정의된 메서드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌
-
추상 클래스 : extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장 시키는 느낌
-
참고사이트