출처 : 유튜브 [ 자바의 정석-기초편 ] 을 보고 정리 작성한 자료입니다.
👉 클릭! 유튜브 링크
- 핵심!! 추상 메서드의 집합
- 구현된 것이 전혀 없는 설계도. 껍데기
- 멤버는 public abstract 일부 혹은 전부 생략 가능.
- 상수는 final 도 생략 가능
- 인터페이스의 조상은 인터페이스만 가능 (Object가 최고 조상X)
- 다중 상속 가능 (추상 메서드는 충돌해도 문제 없음)
인터페이스는 인스턴스 변수를 가질 수 없으나 추상 클래스는 가질 수 있다는 것이 가장 큰 차이점이다.
- 추상 클래스는 일반 클래스 + 일부 추상 메서드의 조합이라면,
- 인터페이스는 추상 메서드들의 집합.
인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상 메서드를 모두 구현해야 한다.
}
abstract class 클래스이름 implements 인터페이스이름 {
// 부분적으로 구현할 경우, class 에 abstract 를 붙여
// 모두 구현이 되지 않았다는 것을 명시한다.
}
- 인터페이스도 구현 클래스의 부모 역할을 할 수 있다.
- 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
class Fighter extends Unit implements Fightable{
public void move () {};
public void attack (Fightable f) {};
// Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능
int a;
int b;
}
Unit u = new Fighter();
Fightable f = new Figher();
f.move();
f.attack(new Figher());
f.a // XXXX Fightable 에 선언된 것만 가능. 리모컨 역할.
- 두 대상(객체)간의 '연결, 대화, 소통'을 돕는 '중간 역할'
- 선언(설계)와 구현을 분리 -> 껍데기와 알맹이.
- 개발 시간 단축 -> 알맹이가 만들어지기 전에도 껍데기로 작업 가능.
- 표준화가 가능 -> JDBC(인터페이스 집합)
- 서로 관계 없는 클래스들을 관계를 맺어줄 수 있다.
JDK 1.8부터 추가할 수 있게 됨
이유는? -> 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려워서.
어려운 이유는? -> 그 인터페이스를 구현한 클래스들에서 추가한 메서드를 모두 구현해줘야 해서.