
핵심요약
LY Corporation의 코드 품질 개선 시리즈에서, 함수 간 암묵적 연관성으로 인해 발생하는 문제점을 'MessageModel' 예시를 통해 분석하고, 함수 통합 및 명시적 연관성 부여를 통한 해결 방안을 제시합니다.
코드 품질 개선 기법: (투명한) 운명의 붉은 실
핵심 요약
LY Corporation은 개발 생산성 유지를 위해 코드 품질 개선 활동의 일환으로 Review Committee를 운영하고 있습니다. 이 활동에서 도출된 인사이트를 바탕으로 코드 품질 개선 기법 시리즈를 연재하며, 이번 편에서는 함수 간의 암묵적 연관성 문제를 다룹니다.
문제 제기: 암묵적 연관성
MessageModel과MessageContent를 사용하는 UI 레이어 로직에서getMessageText함수가isContentValid함수의 반환 값에 암묵적으로 의존하는 문제가 발생합니다.- 이는
isContentValid가 true를 반환할 때만getMessageText를 호출할 수 있다는 가정을 위반해도 런타임 에러로만 감지될 수 있다는 단점을 가집니다. - 타입 추가 및 업데이트 시
isContentValid와getMessageText간의 동작 일관성을 검증해야 하는 부담이 있습니다. bindToViews구현만으로는 이 두 함수의 연관성을 파악하기 어려워, 리팩터링 시getMessageText의 오용 가능성이 존재합니다.
해결 방안: 함수 통합 및 명시적 연관성
isContentValid는 필터,getMessageText는 변환 역할을 하지만, 근본적으로는 동일한 로직을 처리하므로getMessageText함수에 통합하여 해결할 수 있습니다.- 통합 후, 유효하지 않은 콘텐츠 유형은 null을 반환하도록 하여 API 사용의 명확성을 높입니다.
- 만약
isContentValid의 재정의가 필요하다면, 독립 함수가 아닌getMessageText를 활용하여 구현함으로써 두 함수 간의 연관성을 명시합니다. - 이 접근 방식은
getMessageText단독 사용의 안전성을 보장하고, 함수 간의 일관성을 유지합니다.
결론
- 함수 간에 암묵적인 연관성이 존재할 경우, 이를 하나의 함수로 통합하거나 연관성을 명확히 드러내는 방식으로 코드를 개선해야 합니다.
- 이는 코드의 가독성, 유지보수성, 그리고 안전성을 향상시키는 데 기여합니다.
- 키워드: conditional branch, function precondition, implicit dependency
라인