[Java] 유틸 클래스란?

Daon (HyeongIk Jo)·2024년 3월 25일
7

개글스

목록 보기
1/8
post-thumbnail

유틸클래스에 대해 알아보자

유틸 클래스(Static Util Class)

여러 클래스에서 공통적으로 사용되는 메서드를 모아서 클래스로 만든 것이다. 중복된 코드를 방지할 수 있고 효율적으로 관리할 수 있다. 이를 Helper Class라고도 한다.

구조

3가지 특징을 가진다.
1. 인스턴스 필드를 가지지 않는다. 즉, 상태를 가지면 안된다.
2. 모든 메서드들은 static으로 되어있다.
3. 인스턴스화가 될 필요가 없어 이를 방지하기 위해 기본 생성자를 private으로 둔다.

public final class ChessBoardMakingUtil {
	private ChessBoardMakingUtil() {
    }
    
    public static Map<Position, Chess> create() {
    	// 코드
    }
    
    private static Map<Position, Chess> createInitialSpecialPieces() {
    	// 코드
    }
}

문제

  1. 유틸 클래스는 객체지향적 프로그래밍(OOP)가 아니다.
    기능만을 분할한 절자척 프로그래밍에 가깝다.
    다른 클래스로부터 종속성이 커지며(결합도가 강해진다), 막연한 기준이 없다면 코드가 점점 늘어나면서 너무 많은 책임을 가지기 쉬워진다.

  2. 단위 테스트하기 어렵다.
    Util 클래스와 결합도가 강하기 때문에 의존성르 분리하여 테스트하는 것이 어렵다.

해결 방안

메세지를 주고 받는 객체로 만들면 된다.
정적 메서드를 호출하는 대신, 요구하는 행동을 제공할 수 있는 객체로 바꿔보자.
예시

// 절차적 메서드 호출
int max = NumberUtils.max(10, 5);

// 객체지향
int max = new Max(10, 5).intValue();

결론

목적에 맞는 클래스들로 분리해보며 OOP를 실현해보자


참고 링크

Pawn의 기록저장소 - Static과 Utility Class
Migul - 객체지향 프로그래밍으로 유틸리티 클래스를 대체하자
Junroot - Utility Class

profile
To be a Backend Developer

0개의 댓글

관련 채용 정보