< 인터페이스 >
- 추상메서드만을 정의하고 있는 특수한 형태의 클래스
- 인터페이스 안에 포함되는 메서드는 모두 추상메서드뿐이므로 abstract 키워드를 생략할 수 있다
- 추상 메서드(본문이 없는 메서드)의 모음이다. 이는 클래스가 제공해야 하는 메서드를 정의하는 청사진 역할을 한다
- implements 키워드를 사용하여 상속 받는다.
- 인터페이스는 다중 상속이 가능하다. --> 다형성
- 클래스와 인터페이스를 함께 상속할 경우 클래스 상속구문 뒤에 인터페이스 상속구문을 명시한다
public class Monster extends Unit implemets IMove, IFight {
}
- 인터페이스를 상속받은 클래스는 인터페이스에 선언된 모든 메서드에 대해 구체적인 구현을 제공해야 한다
▽ 예)
/**
* 게임 중 캐릭터가 구현해야 하는 이동 관련 기능 나열
*/
public interface IMove {
public void walk();
public void run();
public void jump();
}
public class Monster extends Unit implements IMove, IFight {
public Monster(String name, int hp, int speed, int dps) {
super(name, hp, speed, dps);
}
@Override
public void walk() {
System.out.printf("[Monster] %s가 주변을 배회\n", this.getName());
}
@Override
public void run() {
System.out.printf("[Monster] %s가 주변을 뛰면서 배회\n", this.getName());
}
@Override
public void jump() {
System.out.printf("[Monster] %s가 주변에서 점프\n", this.getName());
}
}
ex )
plantuml
@startuml Overview
interface 이동 {
+걷기(): void
+달리기(): void
+점프(): void
}
interface 전투 {
+공격(): void
+방어(): void
+회피(): void
}
interface 기본동작 {
+아이템획득(): void
+NPC대화(): void
}
(2) copyright©이광호강사 (leekh4232@gmail.com)
class Unit {
-이름: String
-체력: int
-속도: int
-공격력: int
----
+Unit(이름: String, 체력: int, 속도: int, 공격력 int)
----
+get이름(): String
+set이름(이름: String): void
+get체력(): int
+set체력(체력: int): void
+get속도(): int
+set속도(속도: int): void
+get공격력(): int
+set공격력(공격력: int): void
+toString(): void
}
class 주인공 {}
class 몬스터 {}
주인공 --|> Unit
주인공 --|> 이동
주인공 --|> 전투
주인공 --|> 기본동작
몬스터 --|> Unit
몬스터 --|> 이동
몬스터 --|> 전투
@enduml