안녕하세요 세기무민입니다.
이번 포스팅은 Utility Class에 대해서 Static Method vs @Component 중
어떻게 구성하는 것이 조금 더 효율적인지에 대해 의견을 정리해보려고 합니다.
서론
회사에서 오프라인 코드 리뷰 중 Utility Class에 대해 Static Method가 효율적일지,
@Component가 조금 더 효율적일 지 검토를 해보기로 하였고 이에 따라 개인적인 궁금증에 따라 서치를 시작했다.
Static Method
말 그대로 정적 매서드로 인스턴스 생성 없이 호출이 가능하다. 주로 Utiility Class와 같이 재사용이 가능한 매서드를 제공하기 위해 사용된다.
@Componet
비즈니스, 서비스 로직과 같이 어플리케이션 로직 구현 시 사용되는 어노테이션이며
의존성 주입을 통해 다른 컴포넌트에 대해 참조를 받을 수 있다.
다만, 방대하게 사용할 경우 순환 참조 문제가 발생할 수 있다.
- 순환 참조란 N개의 빈이 서로를 필요로 하여 서로 참조 시
Spring Ioc에서는 어떤 빈을 우선시 해야할 지 판단이 불가능하여 예외 처리가 된다.
Static Method vs @Componet
사실 상 둘다 사용한다고 큰 오류가 발생하는 것은 아니지만...ㅎㅎ
2개를 비교해보면 아래와 같다.
1) Utility Class 내에 다른 클래스의 참조가 필요할 경우라면 @Component를 사용한다.
데이터베이스 연결 혹은 다른 클래스를 참조해야 할 경우와 같이 의존성이 있어서
다른 컴포넌트와 상태 관리가 필요할 경우라면 @Component로 등록해야 한다.
2) 일관된 결과를 제공한다면 Static Method를 사용한다.
일관성 있는 결과 값을 제공하고 외부 컴포넌트를 사용하지 않는 경우라면 Static Method로 구현하는 것이 좋다.
3) 서비스의 성능적인 측면에서는 Static Method를 사용한다.
컴포넌트를 사용하는 것에 비해, Static Method는 객체 인스턴트를 생성하지 않기 때문에 메모리 효율성이 좋다.
요즘은 최적화가 잘 되어 있어서 두개의 차이가 크지 않다고 하지만, 사소한 차이가 서비스의 성능을 좌우하기 때문에
최적의 성능을 제공하기 위해서는 컴포넌트보다 Static Method를 사용하는 것이 효율적이다.
결론
둘다 사용을 해도 무관하지만 Utility Class가 단독으로 사용 가능할 경우는 Static Method를 사용하는 것이 좋고
단독으로 사용이 불가능하며, 향후 확장 가능성이 있는 Utility Class인 경우 @Component를 사용하는 것이 좋다.
'Programing > Java & Spring' 카테고리의 다른 글
[Spring] QueryDsl 설정 및 Q파일 생성 안되는 이슈 해결(Gradle 8.x 이상 설정 방법) (0) | 2024.11.10 |
---|---|
[MacOS] OpenJdk 17 -> temurin 17로 변경하기 (1) | 2024.10.06 |
[Spring] TimeZone에 대해 활용해보자 (0) | 2024.08.21 |
Spring ConstraintValidator 활용하여 유효성 검증하기 : 세기무민의 코딩일기 (0) | 2024.05.21 |
세무민의 코딩일기 : 맥북에서 Java 11 -> 17 Version으로 변경하기 (0) | 2024.04.07 |