인터페이스(Interface)란?
추상 메서드의 집합을 의미한다. 추상 메서드의 집합이므로, 구현된 메소드는 가질 수 없다. 즉, 구현된 것이 전혀 없는 설계도이자 껍데기라고 볼 수 있다.
- 다중상속가능 : 자식 클래스가 여러 부모 인터페이스를 상속가능하다.
- 메소드 오버라이딩 필수 : 자식 클래스는 부모 인터페이스의 함수를 모두 오버라이딩해야 한다.
- 모든 멤버 변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
interface sample1 {
public static final 변수명 = 값; //상수
public abstract 메서드이름(매개변수); //추상메서드
}
interface Movable {
//지정한 위치로 이동하는 기능의 메서드
void move(int x, int y);
}
interface Attackable {
//지정한 대상을 공격하는 기능의 메서드
void attack(Unit u);
}
class 클래스이름 implements Movable, Attackable { //두 개 상속
void move(int x, int y){ }
void attack(Unit u){ }
}
추상클래스와 인터페이스의 차이?
- 추상클래스 : 일반클래스인데 추상메서드를 포함한다. 멤버변수와 생성자를 모두 가진다. 서로 비슷한 기능을 하는 클래스들을 묶을 때 사용한다.
- 인터페이스 : 추상메서드의 집합이다. (구현메스드는 가질 수 없음) 멤버 변수는 가질 수 없지만 상수는 가질 수 있다. (public static final로만 지정가능) 생성자를 가질 수 없다. 서로 다른 기능을 하는 클래스들을 묶을 때 사용한다.
인터페이스의 구현
인터페이스의 구현은 인터페이스에 정의된 추상 메서드를 완성하는 것 (클래스 생성)을 의미한다.
일부만 구현하는 경우, 클래스 앞에 abstract를 붙어야한다.
인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
참고
Java의 정석 기초편(남궁성 지음) 7장 객체지향 프로그래밍 - 인터페이스 부분