[인터페이스(interface)]
* 인터페이스란?
일종의 추상클래스.
오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다.
추상클래스가 '미완성 설계도'라고 한다면, 인터페이스는 '기본설계도'라고 할 수 있다.
* 인터페이스의 작성
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
일반 클래스를 작성하는 것과 같은데, 키워드로 class 대신 interface를 쓴다.
interface에도 클래스와 같이 접근제어자로 public이나 default를 사용할 수 있다.
다음은 인터페이스 멤버들의 제약사항이다.
- 모든 멤버변수는 public static final 이어야 하고, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하고, 이를 생략할 수 있다.
단, static 메서드와 디폴트 메서드는 예외
* 인터페이스의 상속
interface Movable {
void move(int x, int y);
}
interface Attackable {
void attack (Unit u);
}
interface Fightable extends Movable, Attackable {}
인터페이스는 인터페이스로부터만 상속받을 수 있는데, 클래스와는 달리 다중상속이 가능하다.
* 인터페이스의 구현
자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 한다.
추상클래스가 자신을 상속받는 클래스를 정의하는 것과 동일하지만
인터페이스는 키워드 'extends' 대신 'implements'를 사용한다.
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 구현해야 한다.
}
class Fighter implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
public void attack (Unit u) {/*내용 생략*/}
}
// 구현하는 인터페이스의 메서드 중 일부만 구현해야 할 때
abstract class Fighter implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
}
// 상속과 구현을 동시에 해야 하는 경우
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
public void attack (Unit u) {/*내용 생략*/}
}
* 인터페이스의 장점
- 개발시간을 단축시킬 수 있다
- 표준화가 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다
- 독립적인 프로그래밍이 가능하다
728x90
'Programming Language > Java' 카테고리의 다른 글
[Java] 다형성(polymorphism), 추상클래스(abstract class), 추상메서드(abstract method) (0) | 2021.02.23 |
---|---|
[Java] 상속 | 클래스 상속, 오버라이딩, 오버로딩 (0) | 2021.02.23 |
[Java] 객체지향언어(3) | 제어자(modifier), 접근 제어자(access modifier) (0) | 2021.01.31 |
[Java] 클래스(class) 문제 풀이 | 클래스(class)작성 예제, 엔클로징 인스턴스 오류 (1) | 2021.01.31 |
[Java] 객체지향언어(2) | 변수와 메서드, 생성자 (1) | 2021.01.25 |