보통 Util 클래스는 문자열 관련, 랜덤값 생성, 날짜 및 시간 처리 등 프로젝트 전역에서 사용되는 특정 로직이나 독립적인 기능을 구현해둔 클래스/패키지라고 한다.
내가 생각해본 Util 클래스의 특징은 세 가지가 있다.
예를들면 java.util.Random
을 사용하여 랜덤값을 만드는 경우 RandomUtil
을 만들 수도 있을 것 같다. RandomUtil
에는 pickNumberInRange(int minimum, int maximum)
, pickNumberInList(List<Integer> numbers)
등 랜덤값을 구하는 등 java.util.Random
를 이용한 메서드들이 있을 수 있다. 이런 기능들은 어떤 상태를 가지고있지 않기 때문에 static으로 선언되어 사용될 것 같다.
또 다른 예시로 StringUtil
같은 것도 가능할 것 같다. 입력받은 자동차의 이름을 split기능으로 자르고 싶을 때 StringUtil
에 split
메서드를 만들어 사용할 수 있을 것 같다. 물론 split같은 기능들은 너무 간단하기 때문에 util로 만들지 않아도 충분히 쓸 수 있다. 그러니까 그 기준을 잘 정해보자!
Util은 수정을 최소화하자! 잦은 수정이 필요한 경우라면 내가 잘못 설계했거나 Util성 클래스가 아닐 수도 있다!
Util 패키지는 보통은 Model, View, Controller와 같은 특정 계층에 있지 않고 어디서든 사용할 수 있다. 그러다보니 여러 사용자, 패키지, 계층에서 사용하는 코드가 될 수 있기 때문에 변경이 발생할 경우 파급력이 클 수 있다.
이 기능이 정말 Utility 성격인지 고민해보자!
특정 클래스에서만 사용되는 기능이거나 비즈니스 로직이라고 불릴정도로 중요한 로직이라면 도메인 등 위치하기 더 적절한 곳이 있을 수도 있다. Util 클래스를 만드는 나만의 기준을 정하는것도 좋을 것 같다.