본문 바로가기
Study with group/Key Words

정적 유틸리티 클래스 (Static Utility Class)

by JunHeeLim 2023. 1. 9.

Item 4 에서 자바 진영에서 제공하는 유틸성 클래스를 언급했다.

 

[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라

정적인 필드와 메서드를 담은 클래스의 구현은 객체 지향적인 사고는 아니자만, 공통점이 있는 메서드 혹은 팩터리들을 제공할 때 사용되기도 한다. 자바 진영에서 제공하는 기본 타입, 유틸성

be-study-record.tistory.com

외에도 Apache Commons의 StringUtils, IOUtils, FileUtils 등의 많은 유틸리티 클래스가 존재한다.

유틸리티 클래스는 자주 사용되는 공통 기능들을 제공한다.

 

이러한 공통기능을 자주 사용해 왔지만 이렇게 논쟁이 되고 있는지 몰랐다.

https://stackoverflow.com/questions/3340032/are-utility-classes-evil

 

Are utility classes evil?

I saw this question: If a "Utilities" class is evil, where do I put my generic code? And I thought, why are utility classes evil? Let’s say I have a domain model that is dozens of classes...

stackoverflow.com

유틸리티 클래스가 악이라면 공통 코드를 어디에 두어야 하나?

유틸리티 클래스는 악이다.

 

왜? 정적으로 선언되는 유틸리티 클래스는 객체 지향 디자인 원칙에 맞지 않기 때문이다.

 

유틸 클래스로 인해 모듈화의 장점을 얻어오는 것 같지만 고려되는 객체 지향 관점에서의 문제점이 존재한다.

 

1. 강한 결합도

추상화를 진행하지 않았기에 유틸클래스의 변화에 결합도를 가지고 있는 객체는 영향을 받게 된다.

클래스의 개수가 몇개 없다면 문제가 없겠지만 많다면... 유지보수에 문제가 심각하다.

 

2. 단일 책임의 원칙에 위배된다.

유틸 클래스를 사용하는 클래스는 본래 책임 외의 유틸 클래스에 대한 종속성을 얻어 내는 책임을 담당하게 된다.

 

 

댓글