Helper와 Utility 클래스의 차이점은 무엇입니까?


115

XHelper 또는 XUtils 클래스를 호출하는 방법을 결정하는 방법은 무엇입니까?

내 마음에 :

도우미 클래스 는 인스턴스화 할 수 있고 비즈니스 작업을 수행 할 수있는 클래스입니다.

Utils class 는 일종의 인스턴스에 대해 작고 반복적 인 작업을 수행하는 정적 클래스입니다 (Apache의 유틸리티 클래스 ArrayUtils 또는 IOUtils의 예).


5
여기서는 "비즈니스 작업"이 주요 차이점입니다. Utils조직이나 다른 조직에서 사용할 수있는 정적 클래스 에 사용하는 것이 유용한 규칙이라는 것을 알았습니다 . Helper클래스는 프로젝트 내에서 재사용 및 프로젝트 내 종속성이 할 수있는 공통 코드가 있습니다. 물론 일반적으로 허용되는 규칙은 없지만 이것이 유용하다고 생각합니다.
Stephen Hosking 2016 년

1
@StephenHosking 귀하의 설명은 저와 아마도 모든 사람에게 가장 설득력이 있습니다. 가능하다면 댓글을 남기기보다는이 게시물에 대한 실제 답변으로 설명을 게시 할 수 있습니다.
Bigair

@Bigair. 감사합니다.하지만 제 것은 단지 제안 일뿐 답이 아닙니다. 사람들이 도움이된다는 것을 알게되어 기쁩니다.
Stephen Hosking 19 년

답변:


101

사용할 이름 지정 스타일이 많이 있습니다. 더 일반적이기 때문에 Utils를 제안합니다.

Utility 클래스는 정적 메서드 만 있고 상태 비 저장으로 이해됩니다. 그러한 클래스의 인스턴스를 만들지 않습니다.

도우미는 유틸리티 클래스이거나 상태 저장이거나 인스턴스 생성을 요구할 수 있습니다. 가능하면 이것을 피할 것입니다.

이름을 더 구체적으로 만들 수 있다면. 예를 들어 정렬 방법이 있으면 XSorter로 만듭니다.

배열의 경우 다음과 같은 도우미 클래스를 찾을 수 있습니다.

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

BTW 유틸리티 클래스의 약어는 인스턴스가없는 열거 형입니다.

enum XUtils {;
    static methods here
}

인터페이스를 구현해야하는 경우 Stateless Singleton을 사용합니다.

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

나는 this post stackoverflow.com/a/2135797/787698 에서 Xutils는 종속성이없는 정적 클래스입니다. 그것에 대해 어떻게 생각하십니까?
jakcam

@jakcam 흥미로운 포인트. 도우미는 상태 저장이 될 수 있으며 인스턴스가 필요합니다. 가능한 경우 상태 비 저장 및 인스턴스없는 유틸리티 클래스를 사용합니다.
피터 Lawrey

Xutils가 이해하는 것은 종속성없는 정적 클래스 입니까?
jakcam

해당 게시물에서 "xutils"또는 "no dependencies"를 찾을 수 없습니다.
피터 Lawrey

1
@John이 경우 유틸리티 메서드는 테스트 목적으로 조롱하기가 더 어렵 기 때문에 바람직하지 않습니다.
Peter Lawrey

16

일반적으로? 그것은 완전히 임의적입니다. 이것에 대한 규칙은 없습니다.


8

유틸리티는 일반적으로 사용되는 "리프 노드"클래스입니다. 즉, 프로젝트에 대한 종속성이 없으며 중단되거나 쓸모 없게되지 않고 프로젝트간에 이식 될 수 있습니다. 예 : Vector3, RandomNumberGenerator, StringMatcher, 등 ...

"도우미"는 다른 클래스를 돕기위한 디자인을 가진 클래스로 보입니다. 프로젝트에 따라 다를 수도 있고 그렇지 않을 수도 있습니다. GameNetworkClient클래스를 만드는 경우 GameNetworkConnection클래스가 '도움' 이라고 말할 수 GameNetworkClient있습니다..

개발자가 도구를 언급하는 방식은 이러한 단어의 일반적인 사용을 반영합니다. "유용함"대 "유용함"으로 설명 된 보청기 도구를 기억할 수 있다면 유용한 도구가 약간의 맥락을 갖는 경향이 있습니다 (치즈 강판은 치즈를 갈는 데 도움이되고 옥수수 스트리퍼는 옥수수를 벗기는 데 도움이되며 스피드 로더는 총기를 재장 전하는 데 도움이됩니다). "유틸리티"는 다양한 상황 (WD-40, 덕트 테이프, 군용 칼, 접착제, 손전등 등)에서 작동 할 것으로 예상됩니다.


5

Jesper가 말했듯이, 그것은 완전히 임의적 입니다. 조직에 적합한 것이 무엇인지 생각하고이를 관습으로 만들 수 있습니다.

저에게는 다음과 같습니다.

utils- 어디로 든 자유롭게 이동하고 가져올 수있는 정적 클래스입니다.

다른 모듈에서 유용 할 수있는 일반적인 작업을 수행합니다. Peter Lawrey가 말했듯이 더 구체적인 이름 이 유용합니다.

헬퍼 - 클래스 돕는 또 다른 클래스 나 모듈을.

배치 된 모듈에서만 사용되며 다른 곳에서 가져 오는 것은 의미가 없습니다. 따라서 이름은 더 구체적 일 수 있습니다. ModuleName Helper (예 : AdministrationHelper , LoginHelper )


2

이것에 대한 궁극적 인 답은 없습니다. 하나의 명명 체계를 파악하고이를 고수하십시오. 패키지와 클래스의 이름을 지정하는 것은 소프트웨어 아키텍처의 중요한 부분이며 누구도 그 결정을 앗아 갈 수 없습니다.

개인적으로 XHelper를 더 좋아하지만 XUtils는 외래 코드에서 더 자주 봅니다.

또한 JDK와 Guava 에서 모두 찾을 수있는 "복수"명명 체계를 좋아합니다 .

클래스가 Collection객체를 처리하는 경우Collections

배열> 배열 (jdk)
목록> 목록 (guava)
맵> 맵 (guava)

기타

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.