티스토리 뷰
인터페이스는 일종의 추상클래스
추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
오직 추상메서드와 상수만 멤버로 가질 수 있다. 그 외의 다른 어떠한 것도 허용하지 않는다.
추상클래스를 부분적으로만 완성된 미완성 설계도라고 한다면, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도 라고 할 수 있다.
인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기 보단 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
static메서드와 디폴트 메서드는 예외
인터페이스에 정의된 모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는 것이며, 편의상 생략하는 경우가 많다. 생략된 제어자는 컴파일 시에 컴파일러가 자동적으로 추가해준다.
인터페이스의 모든 메서드는 추상메서드여야 하는데, 1.8부터 인터페이스에 static메서드와 디폴트 메서드의 추가를 허용하는 방향으로 변경되었다.
인터페이스는 인터페이스러부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 여러개의 인터페이스로부터 상속 받는 것이 가능하다.
interface Movable {
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movabel, Attackable { }
Fightable은 Movable, Attackable에 정으된 멤버 모두 상속 받는다,
그렇다면 인터페이스는 어떻게 구현할까?
인터페이스는 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 하는데, 그 방법은 추상클래스가 자신을 상속받는 클래스를 정의하는 것과 다르지 않다. 단지 클래스는 확장한다는 의미의 'extends'를 사용하지만 인터페이스는 구현한다는 의미의 'implements'를 사용한다.
class 클래스이름 implements 인터페이스이름 {
//인터페이스에 정의된 추상메서드를 구현한다
}
만약 구현하는 인터페이스 중 일부만 구현한다면 abstract를 붙여서 추상클래스로 선언해야한다.
abstract class Fighter implements Fightable{
}
'JAVA' 카테고리의 다른 글
클래스 작성시 주의 사항 (0) | 2019.01.26 |
---|---|
자바(JAVA)에 대하여 (0) | 2018.02.14 |