lottie
Seungjun's blog
blog
패키지 수정방법

패키지 수정방법

자바에서 패키지의 일부를 수정하려는 경우, 여러 가지 접근 방법이 있습니다.

  1. 메서드 오버라이딩

    클래스가 확장 가능하고 수정하려는 메서드가 오버라이드 가능한 경우, 클래스를 확장하고 메서드를 오버라이드하여 원하는 동작을 제공할 수 있습니다.


  2. 컴포지션

    수정하려는 클래스의 인스턴스를 포함하는 새 클래스를 만들고, 새 클래스에서 필요한 동작을 제공합니다.

    이 방법은 "composition over inheritance" 원칙을 따릅니다.

  3. 소스 코드 수정

    이 방법은 권장되지 않습니다. 패키지의 소스 코드를 직접 수정하면, 패키지를 업데이트할 때 수정한 내용이 손실될 수 있습니다. 또한, 이 방법은 라이선스 문제를 일으킬 수 있습니다.

  4. 포크 및 수정

    이 방법은 패키지의 소스 코드를 복사하여 새로운 프로젝트를 만들고, 이 새 프로젝트에서 원하는 변경을 수행하는 것입니다. 이 방법은 패키지를 업데이트하는 데 어려움을 초래하며, 라이선스 문제를 고려해야 합니다.


    나의 경우엔 자바8 => 자바17로 버전 업그레이드 진행중 발생했다.

    여러가지 이유로 기존 javax 패키지에서 jakarta로 바꿔야하는데

    apache.commons.mail 이 jakarta를 지원하지 않는 점이 문제였다.

    기존 코드는 수정하지 않고 javax를 jakarta로 어떻게 바꾸면 좋을 지 고민해보니 프로젝트에 필요한 MimeMessageParser 클래스의 경우, 이 클래스는 final로 선언되어 있으므로 확장할 수 없었다.

    따라서 이 클래스를 수정하려면 컴포지션을 사용하거나, Apache Commons Email 프로젝트를 포크하고 수정해야 했다.

    사실상 두번째 선택지는 너무 많은 리소스의 투자가 필요했기에 컴포지션으로 진행하기로 결정했다.