Neil Madden의 글은 sealed 타입과 완전한 패턴 매칭을 공개 라이브러리 API에 적용할 때의 호환성 함정을 설명한다. 새 하위 타입을 추가하면 기존 클라이언트를 다시 컴파일할 때 switch가 더 이상 완전하지 않을 수 있고, 재컴파일하지 않은 코드도 새 값을 만나면 MatchException이 발생할 수 있다. Java 언어 명세 역시 하위 타입 추가를 바이너리 호환 변경으로 보면서 실행 시의 마이그레이션 비호환 가능성을 명시한다. 한꺼번에 빌드하는 내부 모델과 외부에 배포하는 API는 버전 정책을 달리 검토할 필요가 있다.
테크로 돌아가기
테크
Java sealed 확장, 바이너리 호환만으로 안전하지 않아
공개 타입에 하위 클래스를 추가할 때 기존 switch의 실행 실패와 재컴파일 영향을 함께 평가해야 한다.