Notice
Recent Posts
Recent Comments
Link
S E P H ' S
추상클래스와 인터페이스의 차이 본문
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 |