본 글은 아래 링크의 포스트를 번역한 내용입니다.
Best Practices for Creating Utility Classes in Software Development
Introduction
medium.com
개요
애플리케이션을 개발할 때 유틸리티 클래스를 많이 사용한다. 유틸리티 클래스는 애플리케이션 개발에서 공통으로 사용되는 기능을 제공한다. 개발자마다 유틸리티 클래스를 만드는 방법과 접근 방식이 크게 다를 수 있다. 본 글에서는 유틸리티 클래스를 만드는 Best Practice에 대해 알아보자
유틸리티 클래스란?
유틸리티 클래스는 애플리케이션 전반에서 공통으로 사용되는 기능을 제공해주는 특수한 클래스이다. 유틸리티 클래스에는 다른 클래스들과 구별되는 몇 가지 특징이 있다.
- 불변성과 무상태성 : 내부 상태를 유지하지 않아야 하며, 변경되지 않는 메서드만 가져야 한다.
- 인스턴스 생성 없음 : 인스턴스를 생성할 수 없도록 설계되어야 하며, static 메서드로만 접근할 수 있어야 한다.
유틸리티 클래스 vs 헬퍼 클래스
유틸리티 클래스와 헬퍼 클래스는 종종 혼동되어 사용되는 경우가 있는데, 둘의 차이점을 명확히 아는 것이 중요하다.
- 유틸리티 클래스 : 인스턴스화가 불가능하고, static 메서드만을 가진다.
- 헬퍼 클래스 : 특정 작업을 수행하기 위해 사용되며 인스턴스를 생성할 수 있고, 상태를 가진다.
유틸리티 클래스 Best Practice
이제 유틸리티 클래스를 만들 때의 Best Practice를 살펴보자
- private 생성자 사용 : 인스턴스화를 방지하기 위해 유틸리티 클래스는 private 생성자가 있어야 한다. 이렇게 하면 외부에서 실수로 유틸리티 클래스의 인스턴스를 만드는 것을 방지할 수 있다.
- 클래스에 final 키워드 사용 : 서브클래싱을 방지하고 일관성을 유지한다.
- SOLID 원칙 준수 : SOLID 원칙을 준수해야 하며, 특히 단일 책임 원칙(SRP)을 준수하여 각 유틸리티 클래스가 하나의 명확한 목적을 가지도록 설계해야 한다.
예시 사용 사례
금융 애플리케이션을 개발하고 있다고 가정하고 다양한 계정에 대한 연간 잔액을 계산해야 한다고 했을 때의 유틸리티 클래스를 예시를 살펴보자
public final class FinancialUtility {
private FinancialUtility () {
// 인스턴스화를 방지하기 위한 개인 생성자
}
public static double calculateYearlyBalance ( int accountId, int year) {
// 계산 로직
}
}
롬복을 사용한다면 아래와 같이 작성할 수 있다.
@NoArgsConstructor(access = AccessLevel.PRIVATE) // 인스턴스화를 방지하기 위한 개인 생성자
public final class FinancialUtility {
public static double calculateYearlyBalance ( int accountId, int year) {
// 계산 로직
}
}
'Java' 카테고리의 다른 글
Java - 자바 가비지 컬렉션(Garbage Collection)을 알아보자 (1) | 2024.11.09 |
---|---|
Java - JVM 구조와 동작 방식 (1) | 2024.11.03 |
Mybatis - SAXParseException: The content of elements must consist of well-formed character data or markup 원인과 해결법 (0) | 2024.06.05 |
Java - File로 파일 목록 이름 조회하기 (1) | 2024.01.25 |
Eclipse Memory Analyzer - Eclipse MAT 설치 방법 (MacOS) (0) | 2023.08.17 |
본 글은 아래 링크의 포스트를 번역한 내용입니다.
Best Practices for Creating Utility Classes in Software Development
Introduction
medium.com
개요
애플리케이션을 개발할 때 유틸리티 클래스를 많이 사용한다. 유틸리티 클래스는 애플리케이션 개발에서 공통으로 사용되는 기능을 제공한다. 개발자마다 유틸리티 클래스를 만드는 방법과 접근 방식이 크게 다를 수 있다. 본 글에서는 유틸리티 클래스를 만드는 Best Practice에 대해 알아보자
유틸리티 클래스란?
유틸리티 클래스는 애플리케이션 전반에서 공통으로 사용되는 기능을 제공해주는 특수한 클래스이다. 유틸리티 클래스에는 다른 클래스들과 구별되는 몇 가지 특징이 있다.
- 불변성과 무상태성 : 내부 상태를 유지하지 않아야 하며, 변경되지 않는 메서드만 가져야 한다.
- 인스턴스 생성 없음 : 인스턴스를 생성할 수 없도록 설계되어야 하며, static 메서드로만 접근할 수 있어야 한다.
유틸리티 클래스 vs 헬퍼 클래스
유틸리티 클래스와 헬퍼 클래스는 종종 혼동되어 사용되는 경우가 있는데, 둘의 차이점을 명확히 아는 것이 중요하다.
- 유틸리티 클래스 : 인스턴스화가 불가능하고, static 메서드만을 가진다.
- 헬퍼 클래스 : 특정 작업을 수행하기 위해 사용되며 인스턴스를 생성할 수 있고, 상태를 가진다.
유틸리티 클래스 Best Practice
이제 유틸리티 클래스를 만들 때의 Best Practice를 살펴보자
- private 생성자 사용 : 인스턴스화를 방지하기 위해 유틸리티 클래스는 private 생성자가 있어야 한다. 이렇게 하면 외부에서 실수로 유틸리티 클래스의 인스턴스를 만드는 것을 방지할 수 있다.
- 클래스에 final 키워드 사용 : 서브클래싱을 방지하고 일관성을 유지한다.
- SOLID 원칙 준수 : SOLID 원칙을 준수해야 하며, 특히 단일 책임 원칙(SRP)을 준수하여 각 유틸리티 클래스가 하나의 명확한 목적을 가지도록 설계해야 한다.
예시 사용 사례
금융 애플리케이션을 개발하고 있다고 가정하고 다양한 계정에 대한 연간 잔액을 계산해야 한다고 했을 때의 유틸리티 클래스를 예시를 살펴보자
public final class FinancialUtility {
private FinancialUtility () {
// 인스턴스화를 방지하기 위한 개인 생성자
}
public static double calculateYearlyBalance ( int accountId, int year) {
// 계산 로직
}
}
롬복을 사용한다면 아래와 같이 작성할 수 있다.
@NoArgsConstructor(access = AccessLevel.PRIVATE) // 인스턴스화를 방지하기 위한 개인 생성자
public final class FinancialUtility {
public static double calculateYearlyBalance ( int accountId, int year) {
// 계산 로직
}
}
'Java' 카테고리의 다른 글
Java - 자바 가비지 컬렉션(Garbage Collection)을 알아보자 (1) | 2024.11.09 |
---|---|
Java - JVM 구조와 동작 방식 (1) | 2024.11.03 |
Mybatis - SAXParseException: The content of elements must consist of well-formed character data or markup 원인과 해결법 (0) | 2024.06.05 |
Java - File로 파일 목록 이름 조회하기 (1) | 2024.01.25 |
Eclipse Memory Analyzer - Eclipse MAT 설치 방법 (MacOS) (0) | 2023.08.17 |