솔솔
코드 품질을 높이는 리팩토링 여정, 한 달간의 기록 (Enum 리팩토링) 본문
🤔 문제
리팩토링을 하면서 가장 먼저 내눈에 들어온 것은 Enum들이었다.
1️⃣ 설명이 부족한 필드값
Enum의 필드값에 대한 설명이 없어
오랜만에 코드를 열어본 나조차도 의미를 정확히 떠올리기 어려워 가물가물
2️⃣ 모호한 Enum명
Enum명이 명확하지 않아 해당
Enum이 어떤 역할을 하는지 알기 위해 코드를 뒤적뒤적 ERD를 뒤적뒤적
3️⃣ 더 자연스럽게 읽히는 Enum 네이밍 개선
Enum명을 보고 대략적인 의미는 파악할 수 있었지만
좀 더 자연스럽게 읽히는 네이밍이 필요하겠다라고 생각
⚒️ Enum 이해도를 높이기 위한 리팩토링
1️⃣ 설명이 부족한 필드값
기존에는 Enum 값들만 나열되어 있어, 각 값이 의미하는 바를 직관적으로 이해하기 어려웠던 코드를
public enum ApplyResult {
PENDING,ACCEPTED,REJECTED,CANCELED
}
👉 설명 필드를 추가하여 개선했다.
@Getter
@RequiredArgsConstructor
public enum ApplyStatus {
PENDING("결과 대기중"),
ACCEPTED("합격"),
REJECTED("불합격"),
CANCELED("지원 취소");
private final String text;
}
이렇게 하면 IDE에서 Enum 값을 사용할 때 자동으로 설명이 표시되어 코드 가독성이 높아지고 직관적으로 사용 할 수 있다.
(처음 우리바운드 프로젝트를 보는 사람도 무슨 값인지 단박에 이해 가능)
2️⃣ 모호한 Enum명
아래처럼 기존에는 YNP라는 Enum이 있었다.
프로젝트 진행 중에는 자연스럽게 이해했지만 시간이 지나 다시 보면 의미가 쉽게 떠오르지 않는다.
특히 우리바운드 프로젝트를 처음 접하는 사람이라면 이 값이 무엇을 의미하는지 파악하는 데 더 많은 시간을 들여야 한다.
public enum YNP {
Y,N,P
}
👉 YNP는 기업의 탈퇴 상태를 나타내는 값이므로, 더 명확한 의미를 전달할 수 있도록 Enum명을 변경하였다.
@Getter
@RequiredArgsConstructor
public enum EnterpriseDeletionStatus {
Y("탈퇴 회원"),
N("활동 회원"),
P("탈퇴처리 중");
private final String text;
}
이렇게 하면 코드를 읽는 사람도 직관적으로 이해할 수 있어 유지보수성이 향상된다.
3️⃣ 더 자연스럽게 읽히는 Enum 네이밍 개선
ApplyResult라는 Enum이 있다.
이름만 보면 "지원 결과"를 의미한다는 점은 쉽게 이해할 수 있지만
Enum 값들을 읽어보면 뭔가 아쉬움을 남는다.
public enum ApplyResult{
PENDING,ACCEPTED,REJECTED,CANCELED
}
예를 들어
ApplyResult.PENDING → 지원 결과는 결과 대기 중이다. (❌ 부자연스러움)
ApplyResult.ACCEPTED → 지원 결과는 합격이다. (✅ 자연스러움)
ApplyResult.REJECTED → 지원 결과는 불합격이다. (✅ 자연스러움)
ApplyResult.CANCELED → 지원 결과는 지원 취소이다. (❌ 부자연스러움)
지원 결과 = ApplyResult 라고 하면, 합격/불합격이 자연스럽지만
PENDING이나 CANCELED의 경우 읽을 때 부자연스러움이 느껴진다.
@Getter
@RequiredArgsConstructor
public enum ApplyStatus {
PENDING("결과 대기중"),
ACCEPTED("합격"),
REJECTED("불합격"),
CANCELED("지원 취소");
private final String text;
}
👉 그래서 Enum명을 ApplyStatus로 변경했다.
ApplyStatus.PENDING → 지원 상태는 결과 대기 중이다. (✅ 자연스러움)
ApplyStatus.ACCEPTED → 지원 상태는 합격이다. (✅ 자연스러움)
ApplyStatus.REJECTED → 지원 상태는 불합격이다. (✅ 자연스러움)
ApplyStatus.CANCELED → 지원 상태는 지원 취소이다. (✅ 자연스러움)
ApplyStatus로 변경 후 Enum명과 Enum 값이 더 자연스럽게 읽히고 의미도 더욱 명확해졌다.
4️⃣ Enum답게 명명하기
Gender라는 Enum이 있다.
코드에서 해당 Enum을 사용할 때 Gender.M / Gender.F 처럼 표기되는데
자칫 일반적인 변수 처럼 보일 수 있어 Enum임을 직관적으로 알기 어려운 느낌을 받았다.
public enum Gender {
M, F, U
}
👉 그래서 누가 봐도 Enum임을 한눈에 알 수 있도록 아래와 같은 네이밍 규칙을 적용해보았다.
🟡 사물 또는 사람의 종류 라면 → 명사 + Type
예시: Gender → GenderType
예시: Payment → PaymentType
🟡 사물 또는 사람의 동작 상태 라면 → 명사 + Status
예시: ApplyResult → ApplyStatus
예시: OrderState → OrderStatus
그래서 네이밍 규칙을 적용해서 코드를 수정 한 결과
@Getter
@RequiredArgsConstructor
public enum GenderType {
M("남자"),
F("여자"),
U("미지정");
private final String text;
}
어디서든 해당 값이 Enum임을 명확히 인식할 수 있게되었다.
☁️ 마무리 하며
이번 리팩토링을 통해 Enum들의 네이밍을 개선하면서 최종적으로 Enum을 모아놓은 디렉토리를 다시 살펴보니 Enum명들이 한층 명확해지고 Enum답게 정리된 느낌이 들어 만족스럽다. 프로젝트 당시에는 40일 채 안되는 기간 동안 기획, 개발, 발표까지 진행하느라 빠르게 기능 구현하는데 급급했지만 이렇게 시간을 두고 돌아보니 그때 미처 보지 못했던 부분들이 보이기 시작한다. 앞으로 남은 리팩토링도 열심히 퐈이팅해야지!!
'내인생's 기록 > 도전2' 카테고리의 다른 글
코드 품질을 높이는 리팩토링 여정, 한 달간의 기록 (Controller 입력 값 검증) (0) | 2025.04.04 |
---|---|
코드 품질을 높이는 리팩토링 여정, 한 달간의 기록 (CodeRabbit 적용) (0) | 2025.04.02 |
코드 품질을 높이는 리팩토링 여정, 한 달간의 기록 (프로젝트 소개) (0) | 2025.04.01 |
코드 품질을 높이는 리팩토링 여정, 한 달간의 기록 (Intro) (2) | 2025.04.01 |