본 포스팅의 목적
- 객체지향언어의 주요 특성인 다형성의 개념을 이해한다,
- 다형성의 관점에서, 메서드의 매개변수 및 반환타입으로 선언된 인터페이스가 의미하는 바가 무엇인지 알아본다.
이를 그림으로 간단히 표현하면 아래와 같다.
아래와 같이 예시 코드를 통해 다형성의 관점에서 메서드의 매개변수 및 반환타입으로 선언된 인터페이스가 의미하는 바가 무엇인지 알아보자.
1. 메서드의 매개변수가 인터페이스
2. 메서드의 반환타입이 인터페이스
public class FighterTest {
public static void main(String[] args) {
//자식 인스턴스인 Tank를 부모 타입의 인터페이스인 Fightable이 참조한다.(다형성)
Fightable tank = new Tank();
//getFighter()메서드의 반환타입은 Fightble 인터페이스이다.
//이것이 의미하는 것은 Fightable인터페이스를 구현한 자식 인스턴스를 반환하겠다는 것이다.
Fightable marine = tank.getFighter()
//attck()메서드의 매개변수는 Fightble 인터페이스이다.
//이것이 의미하는 것은 Fightable인터페이스를 구현한 자식 인스턴스를 받겠다는 것이다.
tank.attack(marine);
}
}
//인터페이스
interface Fightable {
public abstract void attack(Fightable f);
public abstract Fightable getFighter();
}
class Tank implements Fightable {
//메서드의 반환타입이 인터페이스 : 인터페이스(Fightable)을 구현한 인스턴스를 반환한다.
public Fightable getFighter() {
return new Marine();
}
//매개변수가 인터페이스 : 인터페이스(Fightable)을 구현한 인스턴스를 매개변수로 받는다.
public void attack(Fightable f) {
System.out.println(f + "를 공격!");
}
public String toString() {
return "Tank";
}
}
class Marine implements Fightable {
public Fightable getFighter() {
return new Tank();
}
public void attack(Fightable f) {
System.out.println(f + "를 공격!");
}
public String toString() {
return "Marine";
}
}
참고문헌
- 자바의 정석(남궁성 저)