Home
All Posts
🧺

상수 이름에는 어떤 의미를 담으면 좋을까?

Created
2023/12/01
Tags
CleanCode
Category
Project
2 more properties

 고민고민의 시작

어떤 이름이 좋을까?

정규식을 상수화하는 과정에서 상수 이름을 어떻게 지어야 하는지 고민이 있었다. (역시나 코딩하면서 늘 변수에 대한 고민이 있다) 이 주제를 스터디원들과도 이야기해 보았는데, 한 번쯤 고민해 볼만한 주제인 것 같아 기록을 해둔다.
양의 정수를 나타내는 정규식, 그리고 공백 없이 영문, 한글, 숫자, 쉼표가 포함된 문자열을 나타내는 정규식. 이 두 개를 상수화하는 가운데, 처음에는 해당 정규식이 어디에 어떻게 사용될지의 관점으로 이름을 작성했다. 이름의 조건을 나타내기 위해 allowed_name 이런 식으로 말이다.

내가 아닌 동료 개발자가 본다면?

그런데 만약 이 코드를 동료 개발자가 처음 본다면 allowed_name에 어떤 조건이 포함되었는지 단번에 알 수 있을까? 소스코드를 읽다가 상수 파일이나 기획 문서로 가서 어떤 조건인지 추가적으로 들여다봐야 하지 않을까?라는 생각이 들었다.
자세한 건 아래 코드를 보면서 설명하겠다.

 두 가지 관점

사용 목적의 관점

const REGEX = Object.freeze({ allowed_count: /^[1-9]\d*$/, allowed_name: /^[a-zA-Z가-힣0-9,]+$/, });
JavaScript
복사
처음에는 사용 목적의 관점에 따라 위와 같이 허용된 횟수, 허용된 이름이라는 이름을 썼다. 어떤 대상에 사용하려는지 목적을 나타내고자 했기 때문이다. 어쩌면 상수 그 자체로만 봤을 때는 '아 얘가 이름에 쓰일 정규식구나, 횟수에 쓰일 정규식이구나' 하고 알아볼 수 있겠다.
하지만 상수는 상수 파일보다는 기능 구현 시 소스코드에 녹아들어야 하기 때문에, 위와 같이 쓰면 소스코드만 보고서는 어떤 조건을 가지고 있는지 파악하기 어려울 것이다.

성격의 관점

const REGEX = Object.freeze({ positive_integer: /^[1-9]\d*$/, alpha_numeric_korean_comma_space: /^[a-zA-Z가-힣0-9,]+$/, });
JavaScript
복사
그래서 위와 같이 성격을 나타내는 관점을 담아 수정했다. 이름과 횟수라는 상수의 주체는 어차피 소스코드에서 파악이 가능하니, 해당 주체의 성격이 어떤지, 어떠한 조건 및 규칙을 가지고 있는지를 나타냈다.
다만, 상수 이름에 많은 조건이 포함되다 보니 자칫하면 상수 이름이 불필요하게 길어질 수 있다. 그럴 때는 onlyAlphaNumKorComma 와 같은 형식으로 축약해도 좋겠다.
이렇게 나타내니 동료 개발자가 굳이 기획 문서를 찾아보지 않고 코드만으로 요구사항을 파악할 수 있을 것 같았다.

 결론

결론적으로, 상수 이름은 사용 목적보다 성격을 나타내는 것이 더 좋겠다는 의견이다.
이 코드를 처음 보는 동료 개발자가 코드만 보고도 어떤 규칙이나 조건을 가지고 있는지 단번에 알 수 있기 때문이다. 굳이 기획 문서를 한번 더 들춰보지 않아도 코드를 쓱 한번 읽으면 알 수 있다.
이름 하나 가지고 고민을 이렇게 해야 하나 느낄 수 있지만, 더 좋은 코드를 쓰기 위한 생산적인 고민은 언제나 의미 있다.