Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

ㅇ.ㅇ

[Java] Utility Class 본문

Today I Learned

[Java] Utility Class

yun_ 2023. 4. 23. 23:09
반응형

 

의문

자바에서 말하는 Utility Class가 무엇일까? 뭔가 디렉토리상에도 자주 보이고, 가끔 내가 사용하기도 하지만 구체적으로 어떤 역할을 하는지, 어떤 형식을 가지는지 잘 몰랐기 때문에 정리해보려고 한다.

(1) 유틸리티 클래스란?

  • 인스턴스 메서드와 인스턴스 변수를 제공하지 않고, 매개 변수에 대해 작업을 수행하는 정적 메서드와 변수만을 제공하는 클래스
  • Static 클래스, Stateless로 사용, 멀티스레드 환경에서 thread-safe
  • 대부분 final로 선언되어 상속될 수 없고, 생성자는 private으로 선언되어 초기화 가능성을 막는다

(2) 유틸리티 클래스 사용 시 문제점

  • 강한 결합
    • 유틸클래스를 사용하는 클래스는 유틸클래스에 강한 의존성을 갖게 된다. 추상화 진행이 없으므로 유틸클래스 변화는 해당 객체에 많은 영향을 준다. 따라서 유틸클래스를 변경하면, 해당 클래스에서 매번 수정을 해야 한다. 즉 유연한 객체지향 프로그래밍 불가능하다. 그러므로 유틸리티 클래스 사용 시에는 클래스 관계가 느슨하게 결합되도록 설계해야 한다.
  • 단일 책임
    • 단일 책임 원칙은 클래스나 모듈은 단 하나의 책임만 가져야 한다는 것을 뜻한다. 단일책임은 즉 클래스나 모듈이 수행하는 작업이 변경되어야 할 때야 해당 클래스나 모듈만 수정하면 되어서 유지 보수성이 좋아지는데, 유틸리티 클래스는 여러 가지 작은 유틸리티 함수를 포함해서 이 원칙을 위반하기 쉽다. 
    • 유틸리티 클래스에 새로운 유틸리티 함수를 추가해야 하면 모든 클래스를 수정해야 할 수도 있다는 것.
    • 그러므로 유틸리티 기능이 많다면 관련된 기능을 가진 작은 유틸리티 클래스를 만들거나 관련 기능 묶어서 라이브러리 만드는 게 더 좋다. 

(3) 유틸리티 클래스 사용 이유

  • 캡슐화
    • 비슷한 기능의 메서드와 상수를 모아둔다
  • 유틸리티 기능 제공
    • 코드를 더욱 효율적이고 간결하게 작성 가능 - 코드의 재사용성과 유지 보수성 향상

(4) 유틸리티 클래스 네이밍 컨벤션

  • 대부분 인스턴스 생성 없으므로 클래스명으로 해당 클래스가 유틸리티 클래스라는 걸 표현해야 한다.
  • 일반적으로 'Util', 'Utils', 'Helper'와 같은 단어 사용.
반응형

'Today I Learned' 카테고리의 다른 글

[JUnit] 테스트 관련 어노테이션 정리 #1  (1) 2024.10.13
[Java] FilenameUtils 사용하기  (1) 2024.10.13
[Git] cherry-pick  (0) 2023.03.17
[Java] HashSet  (0) 2023.03.10
[Tomcat] tomcat - work directory  (0) 2023.03.09