본문 바로가기

소프트웨어-이야기/프로그래밍 언어와 프레임워크

[Spring] 유틸리티 클래스에 빈 생성자를 만들어야하는 이유

public final class AmericanoUtils {

    public static boolean isEmpty(String source) {
        return source == null || source.length() == 0;
    }
}

위와 같은 유틸리티 클래스를 만들면, 소나큐브에서 "add a private constructor to hide the implicit public one" 워닝이 뜬다. 유틸리티 클래스에는 기본 생성자가 만들어져있어야하기 때문이다. 

유틸리티 클래스에 왜 기본 생성자를 만들어야할까?

컴파일러는 생성자 코드가 없으면, 자동으로 기본 생성자를 생성한다. 

new AmericanoUtils();

이 경우, 예상치 못한 방식대로 코드가 구현될 수 있다. 그래서 소나큐브는 기본 생성자를 만들 것을 제안한다. 

기본 생성자를 어떻게 만들까?

한땀한땀 만들기

유틸 클래스에 기본 생성자를 만드는 방법은 간단하다. 그런데 예쁘지 않다. 모든 유틸 클래스에 추가하고 싶지 않게 생겼다. 

public final class AmericanoUtils {
    private AmericanoUtils() {
        throw new UnsupportedOperationException("생성자를 지원하지 않습니다.");
    }
}

 

Lombok과 UtilityClass

lombok에서 제공하는 UtilityClass 어노테이션을 사용하면, 간단하고 예쁘게 유틸리티 클래스를 만들 수 있다.  

@UtilityClass
public class AmericanoUtils {
  ...
}
  • private 생성자 생성한다. 
    • 외부에서 생성자를 호출하지 못하게 한다. 만약 내부에서 호출하더라도 오류가 발생하게 처리된다.
  • 알아서 class에 final 설정을 추가한다. 그래서 클래스명 앞에 final 추가를 생략해도 된다. 
    • 다른 클래스에서 상속받는 것을 방지한다. 

 

 

https://www.baeldung.com/java-sonar-hide-implicit-constructor