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
'백엔드' 카테고리의 다른 글
[트러블 슈팅] Reflection 객체 내 @Autowired NullPointerException 발생 (0) | 2022.10.08 |
---|---|
[Java] 왜 배열은 Covariant(공변)이고 제네릭은 Invariant(불공변)일까? (0) | 2022.07.22 |
[Java] Collection - 2. ArrayList와 Vector (0) | 2022.07.06 |
[Java] Collection - 1. Collection Framework (0) | 2022.07.05 |
[Java] Collection.stream().forEach() 와 Collection.forEach() 의 차이 (0) | 2022.06.27 |
댓글