[Java] 인터페이스에 적용된 다형성

KKS·2024년 1월 13일
0

Java

목록 보기
4/6
post-thumbnail

본 포스팅의 목적

  • 객체지향언어의 주요 특성인 다형성의 개념을 이해한다,
  • 다형성의 관점에서, 메서드의 매개변수 및 반환타입으로 선언된 인터페이스가 의미하는 바가 무엇인지 알아본다.

다형성

  • 다형성을 한마디로 표현하면, 부모 타입의 참조변수로도 자식 인스턴스를 참조할 수 있다는 것이다.
  • 자식 타입의 참조변수는 당연히 자식 인스턴스를 참조할 수 있다. 거기에 더해 부모 타입의 참조변수로도 자식 인스턴스를 참조할 수 있으니, 다형성이란 단어가 의미하는 바와 같이 하나의 인스턴스 여러 개의 참조변수가 참조하는 것이 가능하다는 것이다.
  • 따라서, 부모 타입 배열에 여러 타입의 자식 인스턴스들을 담는 것도 가능하다.
  • 여기서, 자식 인스턴스를 참조하는 부모 타입으로는 대표적으로 추상클래스, 인터페이스, 상속해주는 부모 및 조상 클래스 등이 있다.
  • 한가지 주의할 점은, 부모 타입의 참조변수로는 부모 클래스 및 부모 인터페이스에 정의된 멤버만 사용할 수 있다는 것이다. 즉, 자식 인스턴스의 모든 멤버를 사용하는 것은 불가능하다.

이를 그림으로 간단히 표현하면 아래와 같다.

아래와 같이 예시 코드를 통해 다형성의 관점에서 메서드의 매개변수 및 반환타입으로 선언된 인터페이스가 의미하는 바가 무엇인지 알아보자.

인터페이스에 적용된 다형성이 의미하는 2가지

1. 메서드의 매개변수가 인터페이스

  • 인터페이스(Fightable)을 구현한 인스턴스만 매개변수로 받겠다라는 의미이다.

2. 메서드의 반환타입이 인터페이스

  • 인터페이스(Fightable)을 구현한 인스턴스를 반환하겠다라는 의미이다.
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";
	}	
}

참고문헌

  • 자바의 정석(남궁성 저)
profile
공부하고 이해한 내용들을 직접 그림과 표를 그리면서 정리해보는 공간입니다.🤗

0개의 댓글