반응형
# 인터페이스란?
- 일종의 추상클래스이다.
- 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높다.
=> 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
오직 추상메서드와 상수만을 멤버로 가질 수 있다. - 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려진 '기본 설계도'
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
인터페이스 멤버들의 제약사항
- 모든 멤버변수는 public static final ,이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
=> 단, static 메서드와 디폴트 메서드는 예외(JDK1.8부터)
interface PlayingCard {
public static final int SPADE = 4;
final int DIAMOND = 3; // public static final int DIAMOND = 3;
static int HEART = 2; // public static final int HEART = 2;
int CLOVER = 1; // public static final int CLOVER = 1;
public abstract String getCardNumber();
String getCardKind(); // public abstract String getCardKind();
}
- 인터페이스에 정의된 모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는 것이며,
편의상 생략하는 경우가 많다. 생략된 제어자는 컴파일 시에 컴파일러가 자동적으로 추가해준다.
# 인터페이스 구현
- 인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없다.
- 인터페이스는 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 한다.
- 추상클래스는 확장한다는 의미의 키워드 'extends', 인터페이스는 구현한다는 의미의 키워드 'implements'
- 인터페이스의 이름은 주로 Fightable과 같이 '~ 을 할 수 있는'의 의미인 able로 끝나는 경우가 많다.
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 구현해야 한다.
}
class Fighter implements Fightable {
public void move(int x, int y) { /* 내용 생략 */ }
public void attack(Unit u) { /* 내용 생략 */ }
}
# 인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
- 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램을 작성하는 것이 가능하다.
반응형