[java] 제네릭 클래스의 상호 변환(Covariant Conversion)

상호 변환(Covariant Conversion)이란?

제네릭 클래스의 상호 변환은 상위 클래스 또는 인터페이스의 제네릭 타입을 하위 클래스에서 더 구체적인 타입으로 캐스팅하는 것을 의미합니다. 이를 통해 불필요한 형변환 코드를 줄이고 더 깔끔한 코드를 작성할 수 있습니다.

예를 들어, 다음과 같이 선언된 클래스가 있다고 가정해봅시다.

public class Box<T> {
    // ...
}

여기서 하위 클래스인 SmallBox가 있을 때, 상호 변환을 사용하여 BoxSmallBox로 변환할 수 있습니다.

public class SmallBox extends Box<Apple> {
    // ...
}

상호 변환의 장점

상호 변환을 사용하면 코드를 더 명확하고 간결하게 만들 수 있습니다. 또한 상위 클래스의 코드를 수정할 필요 없이 하위 클래스의 타입을 사용할 수 있어 유연성이 향상됩니다.

제약사항

상호 변환은 제네릭 클래스를 확장할 때만 사용할 수 있으며, 제네릭 인터페이스의 경우에도 마찬가지로 확장하여 사용해야 합니다.

상호 변환은 일반 클래스나 인터페이스에서는 제공되지 않으며, 제네릭 클래스의 경우만 활용할 수 있습니다.

이처럼, 제네릭 클래스의 상호 변환은 Java의 강력한 제네릭 기능 중 하나로, 코드의 가독성과 유연성을 높이는 데에 큰 도움을 줍니다.

참고 문헌 https://docs.oracle.com/javase/tutorial/java/generics/covariant.html