1. 정의
- interface 키워드로 선언된 추상 클래스
- 강제하기 위해서 사용된다
2. 특징
- 인스턴스 생성 불가
- upcasting 타입으로 사용 가능
- 추상 클래스가 발전한 개념
- 멤버로는 상수, 추상 메소드만 사용
- 자바의 단일 상속 보완
- implements로 동시
3. 용도
- 기능만을 하위 클래스에 강제하기 위해 사용된다
- 예) 리모델링 법규집
- 1조 1항 : 모든 건물에는 비상구 존재
- 1조 2항 : 하나의 화장실 무조건 존재
- 예) 음료수 자판기 안에 음료수가 아닌 인형이 들어가 있으면 인형이 나올 수 있을까? -> X
interface Unit
4. 다형성
- 클래스는 객체를 만드는 틀, 인터페이스는 클래스를 만드는 틀
5. 계약
- 일종의 계약서, 즉 무조건 지켜야 그 명명을 지닐 자격이 된다
6. 상속
class HandPhone {
void call(){~}
vodi receive(){~}
}
class Camera{
void takepicture(){~}
}
class HandPhoneCamera extends HandPhone{
Camera cm = new Camera();
}
재정리
1. 인터페이스란?
- 추상클래스, 미완성 설계도보다 추상화 정도가 높음
- 알맹이 없는 껍데기
- 클래스 작성에 도움을 줄 목적(클래스 설계를 위한 문법)
2. 인터페이스의 작성
interface 인터페이스 이름{
public static final 타입 상수이름 = 값;
public abstract 메소드이름(매개변수);
}
interface PlayingCard{
int SPADE = 4;
int DIAMOND = 3;
int HEART = 2;
int CLOVER = 1;
String getCardNumber();
String getCardkind();
}
3. 인터페이스의 상속
- 인터페이스도 클래스처럼 상속이 가능 (다중 상속 가능)
interface Movale{
void move(int x, int y)
}
interface Attackable{
void attack(Unit unit)
}
interface Fightable extends Movable, Attackable{}
4. 인터페이스의 장점
- 개발 시간 단축
- 표준화
- 관계없는 클래스에 관계를 맺음
- 독립적 프로그래밍 가능
5. 인터페이스의 이해
직접적인 관계의 두 클래스 (A-B)
Class A {
void method(B b){
b.methond();
}
}
Class B {
void method(){
sout("B class!")
}
}
void main(){
A a = new A();
a.method(new B());
}
간접적인 관계의 두 클래스 (A-I-B)
interface I {void method()}
Class A {
void Amethod(I i){
i.Imethod()
}
}
Class B implements I {
Imethod(){
sout("B method")
}
}