본문 바로가기
백엔드

[Java] Covariant Return Type이란?

by BeforB 2022. 7. 15.
728x90

 

 

객체지향 프로그래밍에서 메소드의 Covariant Return Type이란 서브 클래스에서 오버라이딩된 메소드의 리턴 타입을 “더 좁은" 타입으로 지정할 수 있는 것이다.

 

 

 * 자바의 Covariant(공변)에 대한 자세한 내용은 다음 게시글을 보면 도움이 된다.

 

 

자바에서 Covariant Return Type은 Java 1.5부터 허용되었다.

 

 

코드로 확인해보자.

 

예를 들어 B가 A를 상속받는 subclass라고 하고, A타입을 반환하는 C의 get() 메소드를 오버라이딩할 때 똑같이 A를 반환하지 않고 A의 서브타입인 B를 반환해도 문제가 발생하지 않는다.

(원래 오버라이딩한 메소드에서 리턴타입이 맞지 않을 경우 컴파일 타임에 The return type is incompatible with ... 라는 에러 문구가 뜬다.)

 

예시1

public class A { }
public class B extends A { }

public class C {
	public A get() { // 기존 메소드는 A 타입으로 반환
		return new A();
	}
}

public class D extends C {
	@Override
	public B get() { // A의 하위타입인 B로 반환할 수 있다.
		return new B();
	}
}

 

예시2

public class C {
	public Object get() { // 기존 메소드는 Object로 반환
		return new Object();
	}
}
public class D extends C {
	@Override
	public String get() { // Object의 하위 타입인 String으로 반환할 수 있다.
		return new String();
	}
}

 

 

728x90

댓글