S E P H ' S

추상클래스와 인터페이스의 차이 본문

Programing & Coding/JAVA

추상클래스와 인터페이스의 차이

yoseph0310 2021. 1. 27. 00:06

Java 8 이전에서 추상클래스와 인터페이스의 가장 큰 차이점은 메소드 구현부를 가질 수 있느냐 없느냐 였다. 하지만 Java 8 부터 인터페이스도 default 키워드를 사용해 메소드 구현부를 가질 수 있게 되면서 그 차이점이 모호해졌다. 그래서 둘의 차이점이 여전히 존재하는지에 대한 궁금증이 생겨 조사하고 정리해보았다.

추상클래스 vs 인터페이스 ( JAVA 8 기준)

  인터페이스 추상클래스
공통점 - 객체 생성 불가능
- 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있음.
차이점 - 모든 변수는 기본적으로 public static final
- 모든 메소드는 public abstract
- 다른 여러개의 인터페이스들을 구현할 수 있다.
- static이나 final이 아닌 필드 지정 가능
- public, protected, private 메소드 가능.
- 상속을 통해 구현되는데, 자바는 다중 상속을 지원하지 않으므로
추상클래스를 상속받은 서브클래스는 다른 클래스를 상속받을 수 없다.

추상클래스, 인터페이스의 적절한 사용 케이스

추상클래스

관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우- 추상클래스를 상속받은 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근제어자(protected, private)사용이 필요한 경우- non-static, non-final 필드 선언이 필요한 경우. 즉, 각 인스턴스에서 state 변경을 위한 메소드를 선언할 수 있다.

 

인터페이스

- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용. 

- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.

- 다중상속을 허용하고 싶은 경우

'Programing & Coding > JAVA' 카테고리의 다른 글

Comparable, Comparator  (0) 2021.02.21
JAVA Exception 처리 방식  (0) 2021.02.21
JAVA Exception  (0) 2021.02.21
변수의 초기 값(Default Values)  (0) 2021.02.21
생성자(Constructor)  (0) 2021.02.21