자바(Java)의 빌더 패턴(Builder Pattern)에서 상속 시 타입 정보가 유실되는 문제점을 지적함
F-Bounded Polymorphism을 활용하여 서브 클래스(Subclass)의 타입을 보존하는 해결책 제시
자바(Java)의 Enum에서 F-Bounded Polymorphism이 이미 사용되고 있음을 예시로 설명
C++의 Curiously Recurring Template Pattern과 유사성을 언급하며, 실용적인 측면 강조
자바(Java)의 빌더 패턴(Builder Pattern)에서 상속(Inheritance)을 사용할 때, 서브 클래스(Subclass)의 타입 정보가 유실되는 문제점을 지적한다. VehicleBuilder를 상속받는 CarBuilder에서 make() 메서드를 호출하면 반환 타입이 VehicleBuilder로 고정되어, CarBuilder 고유의 메서드에 접근할 수 없게 된다. 이는 컴파일 타임(Compile Time)에 타입 안전성을 저해하는 주요 원인으로 작용한다.
F-Bounded Polymorphism을 통해 이러한 문제를 해결하는 방법을 제시한다. VehicleBuilder>와 같이 자기 자신을 타입 파라미터(Type Parameter)로 사용하는 기법을 통해, 서브 클래스(Subclass)가 자신의 타입을 반환하도록 구현한다. @SuppressWarnings("unchecked") 어노테이션을 사용하여 타입 캐스팅(Type Casting) 경고를 억제하면서, 컴파일 타임(Compile Time)에 타입 안전성을 확보한다.
자바(Java)의 Enum에서 이미 F-Bounded Polymorphism이 활용되고 있음을 보여준다. Enum>과 같이 자기 자신을 바운드(Bound)로 사용하는 방식을 통해, Enum 간의 비교 연산(Comparison Operation)을 컴파일 타임(Compile Time)에 제한한다. 이는 런타임(Runtime) 오류를 컴파일 타임(Compile Time) 오류로 전환하여, 코드의 안정성을 높이는 효과를 가져온다.
댓글에서는 C++의 Curiously Recurring Template Pattern과 F-Bounded Polymorphism의 유사성을 언급한다. 두 기법 모두 서브 클래스(Subclass)의 타입을 슈퍼 클래스(Superclass)에서 참조하여, 타입 안전성을 확보하는 공통점을 가진다. Curiously Recurring Template Pattern은 템플릿(Template)을 사용하여 구현되며, F-Bounded Polymorphism과 유사한 방식으로 동작한다.
F-Bounded Polymorphism은 깊은 상속 구조(Deep Inheritance)에서는 복잡성이 증가하는 단점이 있다. ElectricCarBuilder가 CarBuilder를 상속받고, CarBuilder가 이미 F-Bound를 사용하고 있는 경우, ElectricCarBuilder는 자체적으로 F-Bound를 재정의할 수 없다. 하지만, 대부분의 실용적인 사용 사례에서는 단일 레벨의 상속 구조(Single Level Inheritance)를 가지므로, F-Bounded Polymorphism은 효과적인 해결책이 될 수 있다.