개발자는 수학과 영어를 공부해야 하고, 변수명 짓는것이 가장 어렵다는말은 정말 많이들 하지만, 정말로 퇴근후에 영어를 공부하고 변수명을 잘 짓는 개발자는 희귀합니다.
영어 공부는 직접적으로 개발실력을 향상시킬 수 있고, 라이브러리 또는 프레임워크 사용법을 몇개 더 익히는거보다 더 필수적으로 선행되어야 하는 공부입니다.
변수명을 잘 짓는것은 개인의 센스이지만, 여기서는 적어도 틀린 이름을 짓지 않도록 하는 법을 소개합니다.
아래 글은 아주 옛날에 작성한 글이고, 미완성입니다.
저도 영어 고수가 아니라 틀린 부분이 많다고 생각하며,
모든 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
=> has
contain
=> contains
player.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
, upTime
weekDay
, downLoad
, upLoad
blackList
, whiteList
enable
의 반대는 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)
이 있겠네요.