일종의 규격, 소통을 위해 필요로 하는 것, 사용하는 기능을 통일
다중상속과 같은 효과를 제공하는 interface
interface A{ }
extends
클래스extends
인터페이스implements
인터페이스extends
클래스 (X)간단한 코드로 이해하기
public interface A{
메소드 2개(abstract)
}
public interface B extends A{
메소드 3개(abstract)
}
public interface C{
메소드 1개(abstract)
}
public class Parent{
public void aa(){}
public void bb(){}
}
public class Test implements A{
interface A의 2개 메소드를 재정의 - abstract 버리고 기능 추가
}
public class Test2 extends Parent implements B, C{
메소드 5개(B extends A) + 메소드 1개(C) 재정의 해야함
}
public class Main {
public static void main(String[] args) {
A a = new Test();
Parent p = new Test2();
B b = new Test2();
A a = new Test2();
C c = new Test2();
}
}
📢 3가지 유형의 게시판을 만든다고 가정해보자
1) QA - 기능 : 등록, 수정, 삭제, 검색 - 답변여부
2) Upload - 기능 : 등록, 수정, 삭제, 검색 - 파일첨부
3) Free - 기능 : 등록, 수정, 삭제, 검색
👉 모든 게시판에 중복되는 공통 기능을 분리해서 유연성을 향상 시키자
'is a'와 'has a' 관계 존재
is a : 상속(extends), 구현(implements)
has a : 멤버필드, 지역변수
class A extends B {} : 속이 빈 화살표 실선
class A implements B {} : 속이 빈 화살표 점선
class A{ B b } (멤버필드) : 실선 화살표
class A{ B b } (지역변수) : 점선 화살표
인터페이스에서 선언되는 모든 메서드는 abstract메서드 이지만
해당 버전에서 default메서드와 static 메서드가 추가 되었다.
❓default 메서드를 사용하면 이미 완전한 메서드 이기 때문에 재정의가 필요 없어진다.
❗이미 구현된 모든 객체들을 해당 기능이 필요하지 않은 클래스에서도
재정의 해야하는 번거로움은 줄일 수 있다.
default or static 메서드는 구현부가 존재하는 메소드
Q1. 인터페이스에 대한 설명으로 올바르지 않은 것을 고르시오. (정답 : 4번)
1) 하나의 클래스는 인터페이스를 여러개 상속받아 구현할 수 있다.
2) 인터페이스는 메서드의 접근제한자는 public 으로 선언된다.
3) 인터페이스는 다른 인터페이스를 상속받을 때 extends 를 사용한다.
4) 인터페이스는 default method를 한개만 가질 수 있다.