[개발 일기] 2025.06.19 - Constant 클래스?

2025. 6. 19. 11:56·개발 일기

💡 개요

 

상수용 클래스를 따로 빼는 게 맞나?

 

 

이러면 뭐랄까 응집도가 분산되지 않나..

 

 

 

🛠️ 상수용 클래스

 

내가 생각하는 상수용 클래스의 장점은 어디서든 사용할 수 있다는 점이다.

 

 

보통 상수 사용은 해당 클래스에서 선언하여 사용하거나 상수용 클래스에서 사용한다.

 

 

다음 코드는 리뷰에 사용되는 별점의 최솟값(1)과 최댓값(5)을 상수용 클래스를 사용하지 않고, 상수 형태로 클래스 내부에 선언한 것이다.

 

class ReviewService {

    private static final int STAR_MIN = 1, STAR_MAX = 5;
    
    ...
}

 

 

저렇게 상수를 선언하면 클래스 내부에선 정상적으로 사용 가능하다.

 

 

하지만 다른 클래스에선 private 접근 제어자 때문에 사용하지 못한다.

 

 

그래서 public으로 변경하면 어떻게 될까?

 

 

리뷰를 사용하는 다른 클래스나 테스트 코드에서 모두 ReviewService를 의존하게 되는 것이다.

 

 

여기서 테스트 코드가 상수에 의존하는 이유는 아래의 테스트 코드 때문이다.

 

class ReviewTest {

    ...

    @Test
    void 별점이_범위를_벗어날_경우_예외가_발생한다() {
        // given
        int smallRate = STAR_MIN-1;
        int bigRate = STAR_MAX+1;
        List<Integer> rateList = List.of(smallRate, bigRate);

        // when & then
        rateList.stream().forEach(
                rate -> assertThatThrownBy(() -> new Star(rate))
                        .isInstanceOf(RestApiException.class)
        );
    }
}

 

 

위 테스트 코드를 보면 STAR_MIN과 STAR_MAX을 사용한다.

 

 

참고로 저 상수들을 테스트 코드에 그대로 사용하는 이유는 이후에 별점 최솟값과 최댓값이 변경될 수 있기 때문!!

 

 

어쨌든 생각보다 많은 부분에서 상수를 의존하게 된다.

 

 

여기서 드는 여러 가지 고민은 ‘ReviewService을 의존하지 못하게 아싸리 Review와 관련된 상수는 ReviewConstants 클래스에 몰아두는 편이 낫지 않나??’ 이다.

 

 

물론 이러면 상수 관리가 매우 편해지긴 한다.

 

 

하지만 어쩔 수 없이 Constant 관련 클래스의 결합도가 높아지게 된다.

→ 다른 클래스에서 모두 의존하게 됨

 

 

하지만 ChatGPT는 다르게 생각한다고 한다.

 

 

의도적으로 결합도를 높이기..!

 

 

전혀 예상치 못한 표현이다.

 

 

이전까지 난 응집도는 높을수록 좋고, 결합도는 낮을수록 좋다고 알고 있었다.

→ 물론 이게 맞긴 함

 

 

하지만 상수라는 것은 프로젝트 내부에서 절대 변하지 않는 값을 표현하는 것이기 때문에 “변하지 않는 값에 대한 전역적 진실”으로 높은 결합도를 가지고 있어도 괜찮을 것 같다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.06.21 - int 입력해야 하는데 double?  (0) 2025.06.21
[개발 일기] 2025.06.20 - Redis을 주 DB로..?  (0) 2025.06.20
[개발 일기] 2025.06.18 - Testcontainers  (0) 2025.06.18
[개발 일기] 2025.06.17 - 단위테스트를 MySQL로 하는게 맞다고 생각하시나요!  (1) 2025.06.17
[개발 일기] 2025.06.16 - Redis Bloom Filter  (0) 2025.06.16
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.06.21 - int 입력해야 하는데 double?
  • [개발 일기] 2025.06.20 - Redis을 주 DB로..?
  • [개발 일기] 2025.06.18 - Testcontainers
  • [개발 일기] 2025.06.17 - 단위테스트를 MySQL로 하는게 맞다고 생각하시나요!
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.06.19 - Constant 클래스?
상단으로

티스토리툴바