
개발자는 수학과 영어를 공부해야 하고, 변수명 짓는것이 가장 어렵다는말은 정말 많이들 하지만, 정말로 퇴근후에 영어를 공부하고 변수명을 잘 짓는 개발자는 희귀합니다.
영어 공부는 직접적으로 개발실력을 향상시킬 수 있고, 라이브러리 또는 프레임워크 사용법을 몇개 더 익히는거보다 더 필수적으로 선행되어야 하는 공부입니다.
변수명을 잘 짓는것은 개인의 센스이지만, 여기서는 적어도 틀린 이름을 짓지 않도록 하는 법을 소개합니다.
아래 글은 아주 옛날에 작성한 글이고, 미완성입니다.
저도 영어 고수가 아니라 틀린 부분이 많다고 생각하며,
모든 edge-case를 땜빵식으로 나열하면 글이 2배는 길어질 것 같아서
일부러 쓰지 않은 부분도 있습니다.
또한 `be`동사 혹은 `make`와 `create`에 대한 내용은 두번씩 나오기도 합니다.
감안하고 봐주세요.
초보 개발자에서 빠르게 벗어나는 법
Apple는 명사입니다.Eat은 동사입니다.사과를 먹어라는 appleEat이 아니라 eatApple 입니다.videoPlay()는 잘못되었고 playVideo() 라고 적어야 합니다.fileDownload() 도 잘못되었습니다.함수 혹은 메소드
명령형을 나타냅니다.Drink water는 물을 먹는다 가 아니라 물을 마셔라 입니다.onClick 이런애들이 있겠네요gameStart() => startGame()imageProcess() => processImage()startedGame()은 오답입니다. 써놓고도 좀 이상하네요.변수 혹은 상수
is는 동사지만 잘 알려진 컨벤션중의 하나입니다. was또한 마찬가지입니다.is를 붙이던 has를 붙이던, 헝가리안 표기법을 사용하던 자유이지만 아무튼 동사 원형은 안됩니다.const play = () => { /* ... */ }; 는 결과적으로 함수니까 예외입니다.const playVideo = false; // 현재 재생중인지 여부 는 오답입니다.const isPlaying = false; 로 지으면 됩니다.클래스
be동사
be동사 자체가 별도로 이름을 가지고 있으니까,, 아무튼 특이 케이스입니다.isPlaying()과 변수 이름 isPlaying = false은 둘다 맞아요.심화과정
test는 테스트 그 자체를 나타내는 명사 일 수도 있고, 테스트 하다는 뜻의 동사 일 수도 있습니다.handleClick은 handle(동사) + click(동사)가 아니라 handle(동사) + click(명사)이므로 올바른 표현입니다.that, which, where등으로 이어붙여야 합니다.that, which, where을 써서 완전한 문장을 작성한 코드를 본 적이 있으신가요?놀라운 사실
is는 사실 동사입니다.isPlayVideo()는 동사가 두개입니다. 그러니까 틀린 코드죠동명사
-ing 형태로 이루어진 문법입니다.isPlayingVideo()란 이름으로 작성하시면 됩니다.동사 + s 형태가 와야 합니다.have => hascontain => containsplayer.haveItem() 이 아니라 player.hasItem() 이여야 합니다.[apple, banana, kiwi] 또한 3인칭 단수 입니다.[apple, banana, kiwi].contains(lemon) 이 되어야 합니다.pick은 선택하다 라는 뜻입니다.pickItem은 아이템을 고르라는 뜻이고, 선택된 아이템 이라는 뜻은 절대 아닙니다.pickedItem을 사용하세요.selectItem 이라는 변수명 또한 현재 선택된 아이템이라는 의미가 아닙니다.Management는 mgt로 줄이는 사람이 있고 mgmt로 줄이는 사람이 있습니다.Array는 arr로 줄이는 사람과 ary로 줄이는 사람이 있습니다.ary를 쓰는 사람이 있을 것이고, 어떤 사람은 arr로 변수명을 짓기 시작합니다.몇몇 축약어는 엄청나게 많이 쓰이고있고, 혼동될 여지가 없습니다.
아래의 축약어들은 사용해도 나쁜 코드가 되지는 않습니다. 다만 한번 줄였으면 코드의 모든 부분에서 줄이고, 안줄였으면 모든 부분에서 줄이지 마세요.
nickname은 nick + name 으로 보이지만 어쨌든 한 단어입니다. 단어의 어원은 저도 모릅니다. 하지만 nickName 이라고 쓰면 안되는것은 분명합니다.countDown, userName, upTimeweekDay, downLoad, upLoadblackList, whiteListenable의 반대는 inactive가 아닙니다. disable 입니다.accept의 반대는 reject 입니다. (disallow, deny 는 오답입니다.)set은 get과 짝을 이루어야 합니다.create와 make 입니다.만들다라는 뜻을 가지고 있습니다.make는 재료들을 가지고 물리적인 무언가를 만들어내는 느낌이 강합니다.create는 조금 더 추상적입니다. 물리적이고 아니고의 여부는 중요하지 않지만, 아무래도 무에서 유를 창조하는 경우에 사용한다고 할 수 있습니다.createObject()와 makeObject()로 함수 이름을 지었을때를 생각해 보겠습니다.createObject()가 좀 더 적합하겠네요.단어의 어감
getUsers()는 이미 메모리상에 존재하는 유저를 단순히 반환할것 같은 느낌을 줍니다.queryUsers()는 DB 혹은 서버에서 유저를 조회해서 반환할것 같은 느낌을 줍니다.getUsers()가 비동기 함수이고, 실제로 서버에 다녀올수도 있습니다. 하지만 이 두가지를 구분해주는것은 API 사용자로 하여금 내부 동작을 추측하기 쉽게 해줄 것입니다.get이면 로컬에서 실행하고 DB 호출은 query를 사용하라는것이 아닙니다.set, update, change, modify, apply 가 있겠네요.setEmail(), 비밀번호를 변경하는 함수는 changePassword()라면 좀 안좋겠죠비밀번호 변경을 영어로 하면 setPassword가 아니라 change 혹은 update 로 시작하는 문장이 나오기 때문에 그럴겁니다.changeEmail()로 이름을 지어주세요.사역동사
make밖에 없습니다.make는 (무에서 유를) 만들다 보다 ~하게 만들다 의 의미로도 많이 쓰입니다.create를 쓰세요.makeEnemy() => createEnemy()네이버 사전에서 make의 의미는 20개입니다
(…을 …으로[…이 되게]) 만들다[하다/삼다] 이라는 의미도 있습니다.make로 시작합니다.makeInt(str)가 있습니다.toInt() 혹은 toRef()로도 대체 가능합니다. 이것은 취향의 영역입니다.createInt()와 createRef()는 아무래도 어색하죠make를 사용하는지는 전적으로 개발자의 마음입니다. 다만 사역동사로써의 make와 만들다의 make를 코드 여기저기에 혼용하는건 좋지 않아 보이겠네요.react 스타일 컨벤션인 setIsPlaying(true)이 있겠네요.