인터페이스란?
추상메서드의 집합 (상수, static메서드, default메서드)
- 구현된 것이 전혀없는 설계도(껍데기)
- 모든 멤버가
public
- 인터페이스내의 추상메서드와 상수의 제어자는 생략 가능 ( ∵ 모든 추상메서드와 상수는 항상(예외없이) 똑같은 제어자가 붙기 때문에)
상수 : public static final
추상메서드 : public abstract
(제어자 "1개~모두" 생략 가능)
추상클래스와의 차이🤔
크게 iv의 존재 여부로 구분할 수 있다.
- 추상 클래스는 일반 클래스이면서 추상메서드를 가진 것 👉 생성자, iv 존재
- 인터페이스는 추상메서드외에 아무것도 존재하지 않음 👉 상수
상속
- 인터페이스의 조상은 인터페이스만 가능 (object가 최고 조상이 아님)
- 다중상속이 가능 👉 추상메서드는 충돌해도 문제 없음 (∵ 선언부가 같고 구현부가 다를때 충돌문제가 발생하는데, 추상메서드는 구현부가 없기 때문에)
구현
인터페이스에 정의된 추상메서드를 완성하는 것 👉 상속을 통해 : implements
- 구현시 메서드 제어자로
public
붙여주기💡
∵ 인터페이스에서 제어자는 생략가능하기 때문에 public이 생략되어 있을 수 있지만, 오버라이딩 시, 조상보다 접근제어자의 범위가 좁아지면 안되기 때문 (생략시 default가 됨)
인터페이스의 장점
- 개발시간을 단축할 수 있다.
- 변경에 유리한 유연한 설계가 가능하다. (느슨한 결합)
👉 변경이 적을수록 에러 발생률도 줄어든다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들의 관계를 맺어줄 수 있다.
참고 📑