패키지 수정방법
자바에서 패키지의 일부를 수정하려는 경우, 여러 가지 접근 방법이 있습니다.
메서드 오버라이딩
클래스가 확장 가능하고 수정하려는 메서드가 오버라이드 가능한 경우, 클래스를 확장하고 메서드를 오버라이드하여 원하는 동작을 제공할 수 있습니다.
컴포지션
수정하려는 클래스의 인스턴스를 포함하는 새 클래스를 만들고, 새 클래스에서 필요한 동작을 제공합니다.
이 방법은 "composition over inheritance" 원칙을 따릅니다.
소스 코드 수정
이 방법은 권장되지 않습니다. 패키지의 소스 코드를 직접 수정하면, 패키지를 업데이트할 때 수정한 내용이 손실될 수 있습니다. 또한, 이 방법은 라이선스 문제를 일으킬 수 있습니다.
포크 및 수정
이 방법은 패키지의 소스 코드를 복사하여 새로운 프로젝트를 만들고, 이 새 프로젝트에서 원하는 변경을 수행하는 것입니다. 이 방법은 패키지를 업데이트하는 데 어려움을 초래하며, 라이선스 문제를 고려해야 합니다.
나의 경우엔 자바8 => 자바17로 버전 업그레이드 진행중 발생했다.
여러가지 이유로 기존 javax 패키지에서 jakarta로 바꿔야하는데
apache.commons.mail 이 jakarta를 지원하지 않는 점이 문제였다.
기존 코드는 수정하지 않고 javax를 jakarta로 어떻게 바꾸면 좋을 지 고민해보니 프로젝트에 필요한 MimeMessageParser 클래스의 경우, 이 클래스는 final로 선언되어 있으므로 확장할 수 없었다.
따라서 이 클래스를 수정하려면 컴포지션을 사용하거나, Apache Commons Email 프로젝트를 포크하고 수정해야 했다.
사실상 두번째 선택지는 너무 많은 리소스의 투자가 필요했기에 컴포지션으로 진행하기로 결정했다.