✍ Interface 키워드를 통해 선언할 수 있음.
JDK 8 이후로 상수, 추상메소드에서 디폴트메소드, 정적 메소드까지 추가 가능
✔ 상수
인터페이스에서 값 지정
함부로 바꾸지 말고 제공해주는 값 참조해라.(절대적)
✔ 추상메소드
가이드만 줄 테니 추상메소드를 오버라이팅해서 재구현해라.(강제적)
✔ 디폴트 메소드
인터페이스에서 기본저으로 제공해주지만, 맘에 안들면 각자 구현해서 써라.(선택적)
✔ 정적 메소드
인터페이스에서 제공해주는 거 무조건 써라.(절대적)
❓ 여기서 절대적, 강제적의 의미란?
절대적 : 정말 아무것도 손댈 수 없음.
강제적 : 그래도 인터페이스 implements하지 않으면 피할 수는 있음.
추상 메소드를 인터페이스에서 추가하면, implements한 모든 클래스에서 강제적으로 추상메소드 구현해야함. 안하면 에러남.
쉽게 말해, 이미 운영되고 있는 시스템에서 추가 요건으로 인해 불가피하게 반영해야할 때 디폴트메소드 쓰면 효과적
❓ 여기서 한가지 의문점
추상클래스와 인터페이스의 차이점을 무엇일까?
우선 추상클래스는?
✔ 상속 통해 자손 클래스에서 완성하도록 유도하는 클래스
✔ 미완성 설계도
✔ 상속을 위한 클래스이므로 따로 객체 설정 불가
✔ IS – A : “~이다”
인터페이스란?
✔ 추상 클래스처럼 다르 클래스를 작성하는데 도움을 주는 목적으로 작성
✔ 다중상속(구현) 가능
✔ 기본 설계도
✔ HAS – A : “~을 할 수 있는”
❓ 왜 분리되는가?(차이점)
❗ 다중 상속의 가능 여부 때문에
한 개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고, 할 수 있는 기능을 인터페이스로 구현
💡 최종 정리
✔ 추상클래스 사용 시기 : 상속 관계를 타고 올라갔을 때 같은 조상클래스를 상속하는데 기능까지 완벽히 똑 같은 기능이 필요한 경우
✔ 인터페이스 사용 시기 : 상속 관계를 쭉 타고 올라갔을 때 다른 조상클래스를 상속하는데 같은 기능이 필요한 경우
➕ 또 하나 새롭게 알게된 사실
인터페이스는 몸체에서 선언된 것이 무조건 바디에서 지정되어야 한다는 단점이 있었지만, JAVA 8 이후로 인터페이스에 default 기능이 추가되어서 인터페이스로 구현할 수 있다고 한다!!
위 내용은 구글을 참조하여 작성됨.