본문 바로가기
Java의 정석/객체지향 프로그래밍 II

인터페이스와 다형성

by Hwanii_ 2023. 7. 10.
728x90

1. 인터페이스와 다형성.

 

다형성 이란 ?

조상의 참조변수로 자손의 객체를 다루는 것을 의미.

 

인터페이스도 구현 클래스의 부모 라고 말할 수 있을까 ?

(엄밀하게 말하면 아니기는 하지만, 조상이라고 생각하면 받아들이기 편할듯 하다.)

 

예시)

 

class Fighter extends Unit implements Fightable {
	
		public void move(int x, int y) { /* 내용 생략 */ }
		public void attack(Unit u) { /* 내용 생략 */ }
}

 

Fighter 라는 클래스는 Unit 이라는 클래스를 상속 받고 있으며,

 

FIghtable 이라는 이름을 가진 인터페이스를 구현 하고 있는 상황 이다.

 

== 메서드 바디를 완성 시켰기에, 인터페이스를 구현 했다고 할 수 있다.

 

 

 

Unit unit = new Fighter();

 

Unit 이라는 부모 클래스의 참조변수 unit로 자식의 객체를 가리킬 수 있다.

(다형성)

 

Fightable f = new Fighter();

 

Fightable 이라는 인터페이스의 참조변수 f로도 Fighter 객체를 가리킬 수 있다.

( == 인터페이스의 다형성)

 

대신에,

Fightable 이라는 이름을 가진 인터페이스 내부에,

정의된 미완성 메서드만 사용이 가능 하다.

 

== 가리키는 객체 (Fighter) 의 멤버가 많더라도, 사용 할 수 없다.

 

오로지, 인터페이스가 가지고 있는 멤버만 사용이 가능 하다.

 

인터페이스가 가지고 있는 멤버 ?

== 추상 메서드.

 

 

 

2. 예시

 

interface Fightable {
		
		void move(int x, int y);
		void attack(Fightable f);
}

 

Fightable 이라는 이름을 가진 인터페이스 내부에,

두개의 미완성 메서드를 확인 할 수 있다.

 

이때,

attack 메서드의 인자를 보면,

매개변수 타입은 Fightable 타입만 가능 한것을 볼 수 있다.

 

즉, attack 메서드는 Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능 하다는 의미.

 

 

 

3. 인터페이스 타입으로 메서드의 output (return 타입) 을 작성 할 수 있다.

 

Fightable method() {	//	반환 타입 : Fightable 타입.
	
		Fighter f = new Fighter();
		return f;
}

---------------------------------------------------------------

return f 대신에, return new Fighter(); 라고 적어도 동일.

Fightable 인터페이스를 구현한 클래스의 인스턴스를 반환.

참조변수 f는 Fighter 타입 이고,
output 타입은 Fightable 타입 인데,
참조변수 f가 return 값으로 작성이 가능한 이유는,
Fighter 클래스는 Fightable 인터페이스를 구현한 클래스 이기 때문.

 

method 라는 이름을 가진 메서드의 output으로,

Fightable 타입이 작성 되어 있는 것을 볼 수 있다.

 

 

 

4. 예제

 

 

 

Fighter 클래스는 Unit2 라는 클래스를 상속 받았고, Fightable 인터페이스를 구현 했다.

 

 

public 키워드를 붙히지 않으면, 에러가 뜬다.

 

 

 

 

 

부모의 참조 변수로 자식의 객체를 가리키는 개념

== 다형성.

 

인터페이스 또한 이러한 개념이 동일 하다.

 

인터페이스 타입의 참조변수로 인터페이스를 구현한 클래스의 객체를 가리킬 수 있다.

== 인터페이스의 다형성.

 

 

 

반응형

'Java의 정석 > 객체지향 프로그래밍 II' 카테고리의 다른 글

인터페이스의 장점 2  (0) 2023.07.10
인터페이스의 장점  (0) 2023.07.10
인터페이스 (interface)  (1) 2023.07.10
추상 클래스, 추상 메서드  (0) 2023.06.10
매개변수의 다형성  (0) 2023.06.09