본문 제목
추상 클래스와의 차이
A : 추상클래스
B : 인터페이스
- A 포유류
- 북극곰- B 사냥, B 수영
- 날다람쥐 - B 비행
- A 파충류
- 거북 - B 수영
- A 조류
- 독수리 B 사냥, B 비행
- 펭귄 B 사냥, B 수영
|
추상 클래스
|
인터페이스
|
기본 개념
|
물려 받는 것 (혈통/가문/계열)
|
장착하는 것 (학위/자격증)
|
다중 적용
|
불가 (모회사는 하나 뿐)
|
가능 (학위는 여럿 딸 수 있음)
|
상속관계에 의한 제한
|
있음
|
없음
|
생성자
|
가짐
|
가지지 않음
|
메소드
|
구상, 추상 모두 가능
|
추상 메소드 (abstract 안 붙여도 됨), default 구상 메소드,
클래스 메소드 |
필드
|
모두 가능
|
상수만 가능 (final 명시 불필요)
|
적용 연산자
|
extends | implements |
인터페이스 설명
인터페이스 예시
public interface Flyer {
String aka = "날짐승"; // ⭐️ final - 초기화하지 않을 시 오류
void fly ();
}
- 인터페이스는 다중상속을 지원하려고 상수와 추상메서드만을 가진다.
- 설계와 구현 분리
- 인터페이스는 여러개를 적용할 수 있다.
- 필드는 public static final만 사용 가능하다.
- 명시할 필요 x
- 초기화가 필수이다.(생성자가 없고, 상수필드만 사용가능하니까.)
- 메서드는 public abstract
- 명시x
- 적용클래스에서 구현 필수.
구현체 샘플
public interface Hunter {
String position = "포식자"; // ⭐️ final - 초기화하지 않을 시 오류
void hunt ();
}
- Hunter 인터페이스를 구현했기 때문에, 추상메서드인 hunt를 반드시 구현해야 한다.(메서드 구현 강제) 주석처리시 에러가 나는 모습을 볼 수 있다.
메인함수에서의 구현
- 추상클래스가 그 자식클래스들에 대해서 다형성을 사용 가능한 것처럼(Mammm, 인터페이스도 인터페이스 자료형으로 구현체를 받아줄 수 있다.(다형성)
자바 8에 추가된 기능
- 클래스 메서드
- default 구상 메서드
- default를 붙이면 구상메서드를 할 수 있다.
- 이 예제는 클래스메서드와 구상메서드의 구현을 보여주고 있는데, 클래스(정적)메서드는 인스턴스 생성없이 그대로 인터페이스에서 바로 호출하고 있고, 구상메서드는 인터페이스 구현체에서 호출하고 있다.
구상메서드를 넣을 수 있도록 한 이유
새로운 자바 버전의 라이브러리 인터페이스에 새 기능이 추가되어야 한다면
만약 이를 적용해서 사용하는 클래스가 매우 많을 경우 ,일일이 다 새 기능을 추가해주어야 하는 상황에 놓이게 된다.
- 구상(default)메서드를 사용해서 하위 클래스를 다 수정하지 않아도 되도록 한다.
- 기존의 코드를 바꾸지 않아도 되는 하위 호환성을 위해 생긴 메서드.
출처
- 사이트, 검색명 (날짜)
'얄코의 제대로 파는 자바 > 섹션5 객체지향 프로그래밍' 카테고리의 다른 글
추상클래스와 인터페이스 차이점 관련글 (0) | 2024.03.23 |
---|---|
싱글턴 (0) | 2024.03.22 |
추상클래스 (0) | 2024.03.20 |
클래스의 final (0) | 2024.03.19 |
다형성 (0) | 2024.03.17 |