추상 클래스와 인터페스의 가장 큰 특징은 역시 추상 메서드를 포함한다는 것이다.
- 추상메서드 - abstact int get(int num); 이와 같이 선언부만 존재하고 구현되어있지 않은 메서드
그런데 굳이 추상 클래스와 인터페이스를 구분해야 할 이유가 무엇인지 각각의 특징에 대해 정리하고
언제 무엇을 선택해야 할지 간단히 정리해본다.
1. 추상 클래스와 인터페이스는 모두 인스턴스를 생성할 수 없다.
2. 추상 클래스는 추상메서드와 멤버메서드 모두를 가질 수 있으나, 인터페이스는 추상메서드만 가질 수 있다.
3. 추상 클래스는 멤버 변수를 가질 수 있으나, 인터페이스는 public static final의 전역 상수만 가질 수 있다.
4. 추상 클래스는 접근지정자를 선택할 수 있지만, 인터페이스는 변수는 public static final, 메서드는 public abstract만 가능하다. (static 메서드와 default 메서드는 제외)
5. 추상 클래스는 하나만 상속(extends)이 가능하지만, 인터페이스는 다중구현(implements)이 가능하다.
위와 같은 공통점과 차이점을 갖는데, JDK 1.8버전부터는 인터페이스도 default 메서드로 구현된 메서드를 가질 수 있게 되면서 그 차이점이 좀 더 모호해졌다. 그렇다면 어떤 경우에 추상클래스를 선택하고 또 언떤 경우에 인터페이스 선택이 적절한지 보자.
- 기능이 일정한 메서드는 슈퍼클래스에서 정의하고, 변경이 필요할 메서드는 서브클래스에서 구현할 경우는 추상 클래스를 사용한다.
- 슈퍼 클래스가 갖는 메서드나 필드에 대한 외부 접근을 제한해야 할 경우는 추상 클래스를 사용한다.
- 여러 추상 메서드를 필요에 따라 구현하고 다형성을 고려해야 한다면 인터페이스를 사용한다.
'Java' 카테고리의 다른 글
List.subList() 함수의 유의점 (0) | 2020.09.19 |
---|---|
java String의 정렬, String에 숫자가 포함되어 있다면? (0) | 2020.08.12 |
특수 문자 출력 (0) | 2020.08.10 |
java Array default value 자바 배열 초기값 (0) | 2020.08.08 |