인터페이스(interface)
일종의 추상클래스
추상클래스보다 추상화 정도가 높아 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
오직 추상메서드와 상수만을 멤버로 가질 수 있다.
class 대신 interface를 사용한다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수 목록);
}
인터페이스의 상속
인터페이스는 인터페이스로부터만 상속받을 수 있다.
여러 개의 인터페이스로부터 상속을 받는 것이 가능하다.
interface Movable {
void move(int x, int y)
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable { }
인터페이스의 구현
인터페이스도 그 자체로는 인스턴스를 생성할 수 없다.
클래스는 extends를 사용하지만, 인터페이스는 implements를 사용한다.
class 클래스이름 implements 인터페이스이름 {
}
만일 인터페이스의 메서드 중 일부만 구현한다면, abstract를 붙여 추상클래스로 선언해야 한다.
상속과 구현을 동시에 할 수도 있다.
class Fighter extends Unit implements Fightable{
...
}
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것이다.
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {}
public void attack(Fightable f) {}
}
Fightable method() {
...
Fighter f = new Fighter();
return f;
}
method()의 리턴타입이 Fightable인터페이스이기 때문에, return문에서 Fightable인터페이스를 구현한 Fighter클래스의 인스턴스를 반환한다.
인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
'JAVA' 카테고리의 다른 글
[Java] 리스트(List) (0) | 2023.07.06 |
---|---|
[Java] 컬렉션 프레임웍(Collections Framework) (0) | 2023.07.06 |
[Java] 추상클래스(abstract class) (0) | 2023.07.05 |
[Java] 다형성(polymorphism) (0) | 2023.07.05 |
[Java] 상속(Inheritance) (0) | 2023.07.05 |