인터페이스
- 결론 : 추상 메서드의 집합 (프로그래밍 관점)
- 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public)
추상 클래스
- 메서드가 전부 추상메서드이다. 모든 메서드는 public abstract 이어야 하면 이를 생략할 수 있다.
- (단 static 메서드와 디폴트 메서드는 예외 - JDK 1.8 부터)
- 모든 멤버변수는 public abstract final 이어야 하며, 이를 생략할 수 있다. (컴파일 시 자동으로 붙음)
- 추상 클래스와 인터페이스의 차이 : 👨🏻🏫 (면접 질문으로 많이 나옴!)
- 추상 클래스 : 일반 클래스인데 추상 메서드를 갖고 있는 클래스 (생성자 O, iv O) -> 일부 미완성
- 인터 페이스 : 추상 메서드만 갖고 있고, 그 외에는 다른 것들을 가질 수 없음. -> 구현된 것이 아무것도 없음
interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능 * 인터페이스는 Object 가 최고 조상아 아님.
- 다중 상속 가능 (추상 메서드는 충돌해도 문제가 없기 때문, 왜냐하면 구현부가 없고 선언부만 있기 때문)
인터페이스의 구현
- 인터페이스에 정의된 추상메서드를 완성하는 것
- 인터페이스에 정의된 추상 메서드를 모두 구현해야한다.
- implements 를 통해 클래스 구현 완성
- 추상클래스 완성과 동일한 방식
- 일부만 구현하는 경우 추상 클래스와 동일하게 클래스 앞에 abstract 를 붙여야 함.
[ 👨🏻🏫정리 ]
인터페이스란?
- 추상 메서드의 집합
인터페이스의 구현이란?
- 추상 메서드의 구현부 만들기
추상클래스와 인터페이스의 공통점
- 추상 메서드를 가지고 있다.
추상 클래스와 인터페이스의 차이점
- 인터페이스는 iv (지역변수) 를 가질 수 없다.
- 추상클래스는 iv를 가질 수 있다.
김영한의 실전 자바
인터페이스
- 인터페이스의 모든 메서드는 모두 public abstract 가 들어감.
- 다중 구현(다중 상속)을 지원함.
인터페이스와 멤버 변수
인터페이스의 멤버 변수는 public, static, final 이 모두 포함되었다고 간주된다.
- UML에서는 인터페이스의 구현(상속) 관계는 점선으로 표시
- 상속 받을 게 없다. 인터페이스에 정의되어있는 메서드를 모두 구현해야하기 때문!
- 메모리 구조, 실행 순서는 모두 동일
인터페이스를 사용해야하는 이유
1. 제약 : 인터페이스를 구현하는 곳에서 인터페이스의 메서드를 반드시 구현해야한다는 제약을 주는 것임. 추가된 기능을 자식 클래스에서 구현하지 않을 수도 있고, 또 더는 순수 추상클래스가 아니게 된다.
2. 다중구현 : 자바에서 클래스 상속은 부모를 하나만 지정할 수 있지만 인터페이스는 다중 구현(상속)이 가능하다.
인터페이스 : 구현체에서 메서드를 구현하지 않으면 안됨.
추상 클래스 : abstract 메서드가 아닌 메서드도 존재할 수 있으면 상속받은 클래스가 해당 메서드를 override하지 않아도 문제가 없다.
참고
자바 8에 등장한 default 메서드를 사용하면 인터페이스도 메서드를 구현할 수 있다. 하지만 아주 특별한 케이스에서만 사용해야한다.
자바 9에 등장한 private 메서드도 마찬가지.
'👩💻 BackEnd > ☕️ 자바 [Java]' 카테고리의 다른 글
[Java] 자바의 정석 : 인터페이스의 장점 (0) | 2024.02.27 |
---|---|
[Java] 자바의 정석 : 인터페이스와 다형성 (1) | 2024.02.27 |
[Java] 자바의 정석 : 추상 클래스와 추상 메서드 (0) | 2024.02.26 |
[Java] 자바의 정석 : 매개변수의 다형성 (0) | 2024.02.26 |
[Java] 자바 8 버전 이상의 자바문법 : Optional (0) | 2024.02.26 |