※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 직역, 의역이 있을 수 있으며, 틀린 내용은 지적해주시면 감사하겠습니다.
이 포스트는 프로그래머가 영어 명명법으로 고민할 때 지침서가 되어 줄 명영을 플로우 차트 형식으로 해설하기 위해 작성됐다. 다만, Vue.js 의 프로젝트에서 윤용되는 룰을 기반으로 작성했으므로 본인의 개발 환경 룰에 맞게 변경하길 바란다.
결론
플로우 차트를 모두 표시하자면 다음과 같다.
(A) 형용사 + 명사
boolean이 아닌 값을 대입할 경우 거의 이 룰을 따른다.
// 예
// 형용사 + 명사
specialCategory // 특별한 카테고리
// 형용사는 동사의 수동형(~ed)혹은 ing형이어도 OK
importedPlayerNames // 임포트된 여러명의 플레이어의 이름
deletedPlayers // 삭제 된 여러명의 플레이어
payingPlayer // 지불한 플레이어
// 형용사가 없어도 명확하게 표시하고 싶은 경우 명사만 혹은 "명사 + 명사"도 OK
errorCode // 에러 코드
centerImageFilePath // 중앙 이미지의 파일 경로
terminalIdsArray // 단말ID가 여러 개 저장된 배열
// 동사+without/before/after~도OK
userWithoutPermission // 권한 없는 유저
itemTypeBeforeUpdate // 갱신 전의 상품 타입
quantityAfterOrder // 주문 후 수량
(B) show+ 명사
표시/비표시를 바꾸는 플래그의 경우는 아래와 같이 작성한다.
// 예
showConfirmationModel
// true: 확인 모델 표시
// false: 확인 모델 비표시
(C) 명사+enabled
어떠한 기능의 ON/OFF를 전환하는 플래그의 경우가 여기에 해당된다
// 예
autoScrollEnabled
// true:자동 스크롤ON
// false:자동 스크롤OFF
disabled여도 가능하지만, 이중 부정이 되므로 한 눈에 알기 어렵기 때문에 이중 부정은 피하는 편이 좋다. 명사의 부분에는 (A)와 같이 형용사+동사를 넣는 것도 가능하다.
(D) 동사 + exists
존재하는지 아닌지의 플래그를 만드는 경우이다. 어순이 다른 점을 주의하자.
// 예
soldOutItemExists
// true: 판매 완료된 상품이 존재함
// false: 판매 완료된 상품이 존재하지 않음
(E) has/contains + 명사
가지는지 혹은 포함하는지에 대한 플래그의 경우에 사용한다.
// 예
containsCheckedOutPlayers
// true: 체크아웃한 플레이어를 포함
// false: 체크아웃한 플레이어는 포함하지 않음
(F) is + 형용사
boolean 플래그의 베이직한 형태이다.
// 예
isNew
isImported // 임포트됐는지 아닌지. 동사의 수동형(~ed)은 형용사와 같다.
isOrderable // 주문가능한지 아닌지. 동사+able도 있다.
is~의 is는 생략해도 괜찮은가?
형용사만으로도 의미를 알 수 있으므로 is는 없어도 괜찮지 않을까?라는 의견이 있다. 개인적으로는 프로젝트내에서 형식을 통일한다면 OK라고 생각한다.
// 예
imported // 임포트됐는지 아닌지
deleted // 삭제됐는지 아닌지
updated // 갱신됐는지 아닌지
(G) on+동사+형용사
프론트쪽에서 사용되는 경우가 많다. 이벤트 관련 함수 명명에 자주 사용된다.
onRowClicked // 행을 클릭한다면
onPaginationChanged // 페이지네이션 변경이 되면
onDeleteButtonClicked // 삭제 버튼이 클릭된다면
onItemDisabled // 상품이 무효화됐다면
// 대상물이 명확한 경우는 on+동사의 수동형(~ed)도 된다.
onClicked // 클릭됐다면
onSubmitted // 송신됐다면
// 「on+동사」가 좋다라는 파도 있는듯 하다.
onClick // 클릭됐다면
onSubmit // 송신됐다면
(H) to + 명사
무언가 변경할 경우에 생략형으로 명명하는 것도 가능하다.
// NG...는 아니지만 길다...
const convertTimeFromSecondsToMinutes = (time) => {...}
// OK. 인수로 초의 수가 올 것이 명확하므로 초→분으로 변환하는 함수라는 것을 알 수 있다.
const toMinutes = (seconds) => {...}
(I) 동사 + 목적어 + 형용사
대상물의 형태를 변화시키는 함수의 경우
// 영수증 인쇄를 마친 것으로 한다.
// recipt = printed 의 관계
SetReceiptPrinted
(J) 동사 + 목적어
가장 메이저한 함수의 명명법이다.
joinStrings // 문자열을 결합한다.
switchTableWidth // 표의 폭을 변경한다
sortCategories // 카테고리를 정렬한다.
toggleArchivedItems // 아카이브 상품을 변경한다.
족적어에는 (A)와 동일하게 명사만 혹은 명사+명사, 형용사+명사도 OK이다.
품사별 테크닉
여기서부터는 명명하는 종류에 관계없이 사용할 수 있는 테크닉을 품사별로 정리했다.
명사에 관련된 테크닉
명사+명사도 있다.
문법적으로는 "명사 of 명사" 와 같은 형태로 쓰는 것이 옳지만, 엄청 길어지므로 추천하지 않는다. 명사만으로도 2~3단어 정도라면 강제로 연결해 적어도 의미를 알 수 있다.
// NG는 아니지만 길다...
codeOfError
pathOfFileOfCenterImage
// OK
errorCode
centerImageFilePath
id,name,code,response,request,path,url...등을 단어 끝에, 단어 맨 앞에는 다른 명사를 붙이는 명명법 자주 사용되므로 추천한다.
단수와 복수를 의식하여
명사를 단수로 할지 복수를 할지에 따라 포함되는 정보가 달라진다.
// 예1
GetSystemConfigs // 시스템 설정을 여러 개 취득한다.
UpdateSystemConfig // 시스템 절정을 하나만 갱신한다.
// 예2
playerCount // 플레이어 1명의 사람 수는 항상 1? 정수?
playersCount // 플레이어 사람 수가 1개 들어 있는 int형
playersCounts // 플레이어 사람 수가 여러 개 들어 있는 배열? 오브젝트?
가능하면 불가산명사를 사용하지 않기
단수형/복수형 사용을 나는 것이 유용하므로, 복수형이 아닌 명사(불가산명사)를 사용하는 것은 좋은 대책이 아니다. 가능하면 가산명사로 바꿔서 사용하자.
// 불가산명사의 예
data, code, information, software
GetData // NG. 취득할 데이터가 1개인지 복수인지 불명확
GetTexts // OK. 취득할 데이터가 복수인 것을 명확하며 데이터형도 알 수 있다.
데이터형을 명시하는 것도 GOOD
~Array, ~Object, ~Stirng, ~Collection등, 데이터형을 명시한 명사를 사용하는 것도 추천한다.
terminalIdsArray // 단말ID가 여러 개 들어있는 배열
너무 구체적으로 쓰지 않기
가능한한 알기 쉬도록 쓰다보면 명명이 길어져버리고 마는 경우가 있을 것이다. 명사는 단수/복수형의 사용 분리만으로 정보가 전달되므로 불필요한 부분은 삭제하자.
// NG는 아니지만 길다...
someItems
allItems
individualItem
// OK.단수/복수형만으로도 전달된다.
items
item
without, before, after 잘쓰기
명사 뒤에 붙이는 것으로 상태/조건을 상세하게 표현할 수 있다.
여기까지 쓸 수 있다면 마스터라고해도 과언이아니다.
userWithoutPermission // "권한이 없는"유저
itemTypeBeforeUpdate // "갱신전의"아이템 타입
itemQuantityAfterOrder // "주문후의"재고수
형용사와 관련된 테크닉
형요사는 동사의 수동형(~ed)으로도 OK
"~됐다", "~된" 으로는 표현의 경우, 동사의 수동형(~ed)를 형용사적으로 사용하는 것이 좋다.
importedPlayerNames // 임포트된 플레이어 이름
deletedPlayers // 삭제된 플레이어
disabledItem // 비표시된 상품
limitedQuantity // 한정된 수량
ing형도 형용사가 된다.
"~하는(한)" 이라는 표현의 경우는 동사 ing 형을 형용사적으로 사용해도 좋다.
payingPlayer // 지불한 플레이어
~ing와 ~ed의 뉘앙스 차이
~ing의 경우는 "명사가 동사한다" 혹은 "지금부터 ~한다"와 같은 느낌.
~ed의 경우는 "명사가 동사됐다" 혹은 "기존에(이미) ~된"과 같은 느낌.
payingPlayer // 지불하는 = 지불하려는 플레이어
PaidPlayer // 지불된= 지불이 끝난 플레이어
부정의 형용사 잘쓰기
// NG (맨 앞에Not만 붙인다고 좋은건 아니다)
NotCategorized
NotCompleted
// OK
Uncategorized
Incomplete
이중 부정은 사용하지 않기
부정형의 형용사도 알기 쉽지만, if문와 함께 사용하면 갑자기 알기 어렵게 되는 경우가 있다. 부정형의 형용사와 부정 조건을 합치면 true와 false가 혼동되어, 굉장히 읽기 어렵고 오해가 만들어지기 쉬운 코드가 된다.
// NG
if (!disabled) {...}
// OK
if (enabled) {...}
형용사의 긍정형/부정형을 의식하여 if문에 기재하자.
동사와 관련된 테크닉
동사는 하나만!
Be동사와 보통의 동사를 함께 쓰는 경우는 잘 없다. "isExists~"와 같은 표기는 좋지 않으므로 주의하자!
참고자료
'IT > 기초 지식' 카테고리의 다른 글
vtk 파일 포맷 (0) | 2022.08.03 |
---|---|
[python] 일본 기상청 API 사용하기 (0) | 2022.07.19 |
[DB] RDB 데이터 베이스 설계 (0) | 2022.06.14 |
[github] 멋진 README를 작성하는 방법 (0) | 2022.06.10 |
[git] Github 팀 개발 메뉴얼 (0) | 2022.06.06 |