2024. 9. 17. 23:21ㆍ내일배움캠프
피드백 사항 첫 번째 내용인 '네이밍' 에 대한 내용을 정리해보려 한다. 정확하게는 '클래스 및 메서드의 네이밍' 으로, 어떤 피드백을 받아 프로젝트에 어떻게 반영했는지 기록했다. 피드백을 반영한 코드는 여기서 확인 할 수 있다.
1. 클래스명
먼저 클래스의 경우 현재 문제가 되는 것이 입력 값의 유효성을 검증하는 역할을 가진 'ValidInput' 클래스이다. 나의 경우 '입력 값의 유효성 검증' 이란 의미를 포함하고 있으며 길이를 최대한 줄이기 위해 이러한 네이밍을 하였는데, 실상은 적절하지 못한 네이밍으로 보인다는 것이 피드백 내용이다.
1-1. 줄임말(약어) 사용
기존 TIL 에도 이름이 길어보여 줄임말을 활용해 네이밍을 했다고 작성했지만, 상당히 잘못된 생각이었다. 항상 "내가 작성한 코드는 '나만' 보는 것이 아니다" 라는 생각을 가져야 한다. 줄임말(약어)을 사용하는 것은 개인의 생각이 반영되는 것이므로 다른 사람이 내가 작성한 코드를 해석(파악)하기 더 어려워진다.
더욱이 'IDE(일부만 작성해도 찾아주는 기능)' 가 발전해 단순히 이름이 길어지는 것을 걱정하기 보다 이름이 길어져 가독성이 저하될 것을 걱정하는 것이 맞아 보인다. 물론 이러한 부분은 클래스뿐만 아니라 메서드나 변수를 네이밍을 할 때도 고려해야 할 것이다.
1-2. 명사 사용
줄임말을 사용하게 되며 어쩌다 보니 클래스명에 형용사(valid, 유용한)가 포함되었다. 언뜻 보면 크게 문제가 없어 보이나 해석에 따라 오해를 살 수 있다는 걸 알게되었다. 'ValidInput' 의 경우 '유효한 입력' 이란 의미인데 이는 해당 객체의 필드에 유효한 입력 정보가 있다는 의미로 해석되어 자칫 데이터 전달 목적으로 사용되는 'DTO' 로 오해할 수 있다. 이보다는 'InputValidator' 나 'InputDataValidator' 같은 명사로 이루어진 이름이 좀 더 클래스의 역할을 잘 나타낼 수 있을 것이다.
1-3. 정리
결국 클래스명이 길다는 이유로 'Validate' 를 'Valid' 로 줄여 네이밍했기에 클래스명가 아닌 DTO 로 착각할 수 있는 이름이 되었고 더불어 다른 개발자가 확인했을 때 클래스의 역할을 파악하기 어려워졌다. 그래서 아래처럼 클래스명을 변경하였다.
2. 메서드명
일부 메서드의 명이 적절해 보이지 않는다는 피드백이 있었다. 메서드는 수행(행위)를 표현하기에 이름에 '동사형' 을 자주 사용하니 해당 부분을 중심으로 생각하고 반영해 보았다.
2-1. 줄임말(약어) 사용
피드백에는 메서드명에 '동사형' 을 사용할 것을 추천한다고 적혀있지만, 개인적으로 판단하기로 피드백에 명시된 'validExit' 나 'validCalculation' 또한 'validate' 란 동사를 줄이기 위해 'valid' 를 사용했기에 의미가 변질 된거라 생각한다. 덕분에(?) 다른 개발자가 내 코드를 보고 오해하는 경험을 하게 되었다(물론 튜터님은 알고 계셨지만 정확한 설명을 위해 이렇게 작성하신거라 생각함). 이런 생각을 한 이유는 정작 다른 메서드들은 '동사' 를 사용해 적절하게 네이밍을 했기 때문, 어쨌든 위에서 말한 것처럼 메서드명을 작성할 때도 줄임말 사용은 멀리하는 것이 좋아 보인다.
2-2. boolean 타입 반환 메서드
이전에 TIL 에 어떤 경우 'fasle' 이고 'true' 인지 헷갈려 boolean 을 반환하는 메서드는 줄여야 하겠다는 내용을 적은 적이 있다. 하지만 이는 애초에 적절한 메서드명을 사용하지 않은 것이 문제였다. 'validExit' 라 네이밍을 했으니 작성한 내가 봐도 "exit 입력 검증을 수행하는 건 기억이 나는데 언제 뭘 반환하더라?" 라는 생각이 드는 것이다.
그렇기에 'is, can, use, has' 등을 사용해 해당 메서드가 boolean 타입을 반환하는 것을 알릴 필요성이 있다. 또한 'if' 를 염두하고 네이밍을 한다면 이전처럼 어떤 경우에 'false' 인지 true' 인지 헷갈리는 경우는 거의 없을거라 생각된다.
2-3. 정리
일단 줄임말로 인한 의도전달이 불투명해졌고 'if' 를 염두하고 작성하지 않아 작성자인 나도 메서드가 언제 어떤 반환 값을 갖는지 예상할 수 없었다. 그래서 아래와 같이 메서드명을 변경하였다.
- checkExit, validExit → isExitCommand : "종료 명령어인가?"
- checkInput, validInput → isValidCalculation : "유효한 연산인가?"
- checkCalNum → isValidCalculatorNumber : "유효한 계산기 번호인가?"
- validOperand → isValidOperand : "유효한 피연산자인가?"
- validOperator → isValidOperator : "유효한 연산자인가?"
참고로 'Level04' 의 경우 'Exception' 을 활용하기에 'level04/validation/InputValidator.validCalculation()' 은 'boolean' 을 반환하지 않고 '예외' 를 던진다. 그래서 아래와 같이 메서드명을 수정하였다.
- validCalculation → checkValidCalculation : "유효한 연산인지 확인"
3. 마무리
내가 생각해도 적절하지 못했던 클래스와 메서드의 이름을 다른 개발자도 쉽게 해석(파악)할 수 있도록 수정(피드백 반영)하였다. 이번에 수정한 것이 '베스트' 라 생각하지는 않기에 앞으로도 계속 어떻게 네이밍하는 것이 의도를 잘 전달 할 수 있을지 다른 사람이 쉽게 해석(파악)할 수 있을지 고민해야 할 것 같다.
참고 문서
'내일배움캠프' 카테고리의 다른 글
[내일배움캠프] 계산기 구현 - 피드백 반영(3) (0) | 2024.09.18 |
---|---|
[내일배움캠프] 계산기 구현 - 피드백 반영(2) (0) | 2024.09.18 |
[내일배움캠프] TIL - 24.09.13(금) (0) | 2024.09.13 |
[내일배움캠프] 숫자 야구 게임 구현 - Level.01 요구사항(1) (0) | 2024.09.13 |
[내일배움캠프] TIL - 24.09.12(목) (0) | 2024.09.12 |