- 일종의 추상 클래스, 미완성 설계도
- 실제 구현된 것이 전혀 없는 기본 설계도
- 추상 메소드와 상수만을 멤버로 갖는다
- 인스턴스 생성 불가, 클래스 작성에 도움을 줄 목적으로 사용
- 표준을 제시해주는 역할
interface 인터페이스_이름{ public static final 타입 상수 이름 = 값; public abstract 메서드이름(매개변수); } interface PlayingCard{ public static final int SPADE = 4; int DIAMOND = 3; int HEART = 2; int CLOVER = 1; public abstract String getCardNumber(); String getCardKind(); }
- 모든 멤버 변수는 public static final 이어야 하며, 생략 가능
- 모든 메서드는 public abstract 이어야 하며, 생략 가능
- 인터페이스도 상속 가능 (다중 상속 허용)
interface Movable{ void move(int x, int y) } interface Attackable{ void attack(Unit u) } interface Fightable extends Movable, Attackable { }
- Object 클래스와 같은 최고 조상이 없음
- 인터페이스를 구현하는 것은 클래스와 상속 받는 것과 같음 (extend => implements)
- 인터페이스에 정의된 추상메서드를 완성
- 개발시간 단축
- 메서드 호출하는 쪽에서는 선언부만 알면 끝
- 동시 개발 가능- 표준화 가능
- 서로 관계없는 클래스들 관계 맺기
- 독립적인 프로그래밍이 가능
- 두 객체 간의 연결, 대화, 소통을 돕는 중간 역할
- 선언과 구현을 분리시키기
Class B{ public void method(){ System.out.println("주말인데 여기서 뭐하냐 나 ㅋㅋ"); } } ------------------------------------------------------------------------------- interface I { public void method(); } class B implenets I { public void method(){ System.out.println("주말인데 여기서 뭐하냐 나 ㅋㅋ"); } }
- 메소드를 사용하는 쪽에서 사용하려는 메서드의 선언부만 알면 됨
- 직접적인 관계의 두 클래스 (A-B) <=> 간접적인 관계의 두 클래스 (A-I-B) (더 잘 짜여진 코드)
<직접적인 관계의 두 클래스>
<간접적인 관계의 두 클래스>
문제
블랙잭