T_era
헬퍼(Helper)와 유틸(Utility)의 차이, 그리고 실전 코드 예시 본문
개발하다 보면 “헬퍼 클래스”, “유틸 클래스”들을 자주 보게 된다.
둘 다 공통 기능을 모아놓은 클래스라는 점은 비슷한데,
실제로는 어떤 차이가 있을까?
그리고 언제 Helper, 언제 Util을 써야 할까?
1. 헬퍼(Helper)란?
헬퍼(Helper)는
- “특정 상황에서, 어떤 객체의 동작을 도와주는 역할”
- 상태(필드)를 가질 수 있고,
- 보통 객체로 생성해서 사용하는 경우가 많음
예시: 이메일 전송을 도와주는 Helper
public class EmailHelper {
private final EmailSender sender;
public EmailHelper(EmailSender sender) {
this.sender = sender;
}
public void sendWelcomeEmail(String to, String name) {
String subject = "Welcome!";
String body = "안녕하세요, " + name + "님!";
sender.send(to, subject, body);
}
}
Q. Helper는 왜 상태(필드)를 가질 수 있나요?
A. Helper는 실제로 “도와주는 역할”을 하면서,
내부적으로 의존성(EmailSender 등)을 가질 수 있기 때문이다.
즉, 상황에 따라 다르게 동작할 수 있다.
2. 유틸(Utility)이란?
유틸(Utility)은
- “어디서나 쓸 수 있는, 순수 기능(stateless) 모음”
- 상태(필드)가 없고,
- 보통 static 메서드로만 구성
- 객체 생성 없이 바로 사용
예시: 문자열 관련 유틸
public class StringUtil {
public static boolean isEmpty(String str) {
return str == null || str.trim().isEmpty();
}
public static String capitalize(String str) {
if (isEmpty(str)) return str;
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}
Q. 왜 유틸은 static 메서드만 쓸까요?
A. 상태가 없고, 어디서나 바로 쓸 수 있어야 하니까
객체를 만들 필요가 없다.
3. 실무에서 헷갈리는 부분
Q. “Helper랑 Util이랑 사실상 똑같은 거 아냐?”
- 비슷해 보이지만, 의도가 다르다
- Helper는 상황에 따라 다르게 동작할 수 있고,
Util은 항상 똑같이 동작해야 한다.
Q. “Helper도 static 메서드만 있으면 Util 아닌가요?”
- 맞다
실제로 Helper/Util 구분이 엄격하지 않은 프로젝트도 많다고 한다. - 하지만 Helper는 “도와주는 역할”,
Util은 “순수 기능 모음”이라는 의도를 코드에서 드러내면
협업/유지보수에 더 좋다.
4. Spring 실무에서의 예시
1) 유틸 클래스 예시 (stateless, static)
public class JwtUtil {
public static String substringToken(String token) {
// ... 토큰 앞뒤 Bearer 제거
}
public static Long getUserId(String token) {
// ... 토큰에서 userId 추출
}
}
- 상태 없음
- static 메서드만
- 어디서나 바로 사용
2) 헬퍼 클래스 예시 (상태, 의존성 주입)
@Component
public class EmailHelper {
private final JavaMailSender mailSender;
@Autowired
public EmailHelper(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public void send(String to, String subject, String body) {
// ... 실제 메일 전송
}
}
- 상태(필드) 있음
- 의존성 주입
- 상황에 따라 다르게 동작
5. 언제 Helper, 언제 Util?
- 상태가 필요 없고, 순수 기능만 제공 → Util
- 상태(필드)나 의존성이 필요 → Helper
- static 메서드만 → Util
- 객체로 만들어서 써야 함 → Helper
Q. 실무에서는 구분이 엄격한가요?
A. 아니다!
프로젝트마다 Helper/Util 구분이 애매할 수 있다.
하지만 “이 클래스의 의도가 무엇인지”를 명확히 하면
협업, 유지보수, 테스트가 훨씬 쉬워진다.
6. 마치며
- Helper와 Util은 비슷해 보이지만, 의도와 사용 방식이 다르다.
- Helper는 “상황에 따라 도와주는 역할”,
Util은 “어디서나 쓸 수 있는 순수 기능 모음” - static, 상태, 의존성이 있는지 없는지로 구분하면 쉽습니다.
'Programing > Spring' 카테고리의 다른 글
| Spring Boot + AWS S3 프로필 이미지 API 구현 (1) | 2025.07.01 |
|---|---|
| Spring Boot EC2 배포 & 테스트 과정에서 문제 해결 (0) | 2025.06.30 |
| Spring API와 Postman으로 네트워크 오버헤드 실험하기 (0) | 2025.06.24 |
| 템플릿 메서드 패턴과 AOP 로깅 구현: 패턴 적용의 적절성에 대한 고찰 (0) | 2025.06.23 |
| AOP로 로깅을 할 때 동적으로 값을 조율할 땐 어떤 방법을 사용할까 (1) | 2025.06.22 |