[Java] 인터페이스 vs 추상클래스
Interface
클래스에서 특정 기능(메소드)을 구현하도록 강제 할 수 있는 기능
interface 인터페이스이름 {
...
public abstract void 메서드이름();
public default void 메서드이름() {};
}
Interface 특징
- 인터페이스는 interface 키워드를 사용하여 정의한다.
- 클래스에서 인터페이스의 구현은 implements 키워드를 사용하여 구현할 인터페이스를 지정후, 추상메소드를 모두 오버라이드 하여 내용을 완성해야 한다.
- 인터페이스는 상수와 추상메소드로 구성되어 있다. (자바8부터 default 메소드와 static 메소드 사용 가능하게 되었고, 이 두가지 메소드는 오버라이딩이 강제가 아니므로 규제가 완화되었다.)
- 인터페이스는 다른 인터페이스를 extends 키워드로 상속 받을 수 있으며, 다중 상속이 가능하다.
- 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 주로 사용한다.
Interface의 장점과 사용 이유
- 인터페이스를 작성해 틀을 미리 만들어 놓으면 일관되고 정형화된 개발을 위한 표준화가 가능하다.
- 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있기 때문에, 개발 시간 단축이 가능하다.
- 클래스와 클래스 간 관계를 인터페이스로 연결해 클래스마다 독립적인 프로그래밍이 가능하다.
Abstract Class
하위 클래스들의 공통점들을 모아 추상화한 클래스로, 추상 메소드를 선언하면서 상속을 통해 하위 클래스에서 메소드를 구현하도록 한다.
public abstract class 클래스이름 {
...
public abstract void 메서드이름();
}
Abstract Class 특징
- 추상 클래스는 abstract 키워드를 사용하여 정의한다.
- 추상 클래스는 다중 상속 불가능하고 단일 상속만 허용한다.
- 추상 클래스는 추상 메소드 외 일반적인 필드, 메소드, 생성자를 가질 수 있다.
- 추상 클래스는 클래스 간 연관관계 구축에 초점을 둔다.
Abstract Class 장점과 사용 이유
- 상속을 통해 중복 코드를 줄일 수 있다.
- 자식 클래스를 그룹화할 수 있다.
인터페이스 vs 추상 클래스
구분 | 인터페이스 | 추상 클래스 |
---|
키워드 | interface | abstract |
변수 | static final(상수) | 제한 없음 |
접근 제어자 | public | 제한 없음 |
상속 키워드 | implements | extends |
다중 상속 | O | X |
-
공통점 : 추상 메소드를 가지며 인스턴스화(new) 할 수 없다. 인터페이스와 추상 클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현해야 한다.
-
차이점 : 대표적으로 다중 상속 여부의 차이가 있지만, 인터페이스는 정의된 메소드를 각 클래스의 목적에 맞게 동일한 기능을 구현하는 것에 초점을 두고, 추상 클래스는 자신의 기능들을 하위 클래스로 확장시키는 것에 초점을 둔다.