개발자 영어

Park June Chul·2021년 3월 10일
35

잘 코딩하기

목록 보기
1/6
post-thumbnail

개발자는 수학과 영어를 공부해야 하고, 변수명 짓는것이 가장 어렵다는말은 정말 많이들 하지만, 정말로 퇴근후에 영어를 공부하고 변수명을 잘 짓는 개발자는 희귀합니다.

영어 공부는 직접적으로 개발실력을 향상시킬 수 있고, 라이브러리 또는 프레임워크 사용법을 몇개 더 익히는거보다 더 필수적으로 선행되어야 하는 공부입니다.

변수명을 잘 짓는것은 개인의 센스이지만, 여기서는 적어도 틀린 이름을 짓지 않도록 하는 법을 소개합니다.

아래 글은 아주 옛날에 작성한 글이고, 미완성입니다.

저도 영어 고수가 아니라 틀린 부분이 많다고 생각하며,
모든 edge-case를 땜빵식으로 나열하면 글이 2배는 길어질 것 같아서
일부러 쓰지 않은 부분도 있습니다.

또한 `be`동사 혹은 `make`와 `create`에 대한 내용은 두번씩 나오기도 합니다.
감안하고 봐주세요.

developer-english

초보 개발자에서 빠르게 벗어나는 법

시작하며

  • 기본 영문법을 지키는것은 클린 코드 작성의 첫걸음입니다.
  • 클린 코드 에 대한 서적이나 번역본을 읽는것보다 영어 문법에 대한 이해가 훨씬 급합니다.
  • 왜냐면 클린 코드 에 대한 서적이나 글을 작성한 사람들은 영어 문법을 공부할 필요가 없는 원어민들이고, 우리는 한국인이기 때문이죠

동사와 명사

  • Apple는 명사입니다.
  • Eat은 동사입니다.
  • 사과를 먹어라appleEat이 아니라 eatApple 입니다.
  • videoPlay()는 잘못되었고 playVideo() 라고 적어야 합니다.
  • fileDownload() 도 잘못되었습니다.

함수 혹은 메소드

  • 함수는 동작 을 나타내므로 현재형 동사 로 시작해야 합니다.
    • 현재형 동사로 시작하는 문장은 명령형을 나타냅니다.
    • Drink water물을 먹는다 가 아니라 물을 마셔라 입니다.
    • 우리가 함수를 호출한다는것은 일반적으로 컴퓨터, 객체, 서버 무언가에게 명령 을 내리는 행동입니다.
  • 현재형 동사 으로 시작하지 않는 함수 이름은 99%는 잘못되었습니다. (가끔 있긴 있어요)
    • onClick 이런애들이 있겠네요
    • 이건 우리가 명령을 내리는게 아니라 받는 입장이라고 생각하시면 됩니다.
  • gameStart() => startGame()
  • imageProcess() => processImage()
  • 현재형 이 와야한다고 했으니 startedGame()은 오답입니다. 써놓고도 좀 이상하네요.

변수 혹은 상수

  • 변수는 을 나타냅니다. 동사 원형으로 시작하면 안됩니다.
    • is는 동사지만 잘 알려진 컨벤션중의 하나입니다.
    • was또한 마찬가지입니다.
    • 왜냐면, be동사 는 그 자체로써 행위를 나타내지 않고, 뒤에 따라오는 단어와 결합해 상태를 나타내기 때문에 이렇게 사용이 가능합니다.
    • 이해하려고 하지 마세요, 저도 영어 잘 몰라요
  • 이름 앞에 is를 붙이던 has를 붙이던, 헝가리안 표기법을 사용하던 자유이지만 아무튼 동사 원형은 안됩니다.
  • const play = () => { /* ... */ }; 는 결과적으로 함수니까 예외입니다.
  • const playVideo = false; // 현재 재생중인지 여부 는 오답입니다.
  • const isPlaying = false; 로 지으면 됩니다.

클래스

  • 클래스 이름을 동사로 짓는 사람은 아직까지 본적은 없지만....
  • 그냥 명사로 잘 하면 됩니다.

be동사

  • 위에 써있긴 한데, be동사 자체가 별도로 이름을 가지고 있으니까,, 아무튼 특이 케이스입니다.
  • 메소드 이름 isPlaying()과 변수 이름 isPlaying = false은 둘다 맞아요.

심화과정

  • 영어는 한 단어에 뜻만 두개인것이 아니라 품사 또한 여러가지가 올 수 있습니다.
  • test는 테스트 그 자체를 나타내는 명사 일 수도 있고, 테스트 하다는 뜻의 동사 일 수도 있습니다.
  • 그러니까 handleClickhandle(동사) + click(동사)가 아니라 handle(동사) + click(명사)이므로 올바른 표현입니다.

동사를 두개 쓰고싶을 때

  • 안타깝게도 영어는 동사를 두개 쓸 수 없습니다.
  • 사실 뻥입니다. 두개를 쓰던 세개를 쓰던 맘대로 할 수 있지만 that, which, where등으로 이어붙여야 합니다.
  • 변수명에 that, which, where을 써서 완전한 문장을 작성한 코드를 본 적이 있으신가요?
  • 결국은 영어가 동사를 2개 쓸 수 있던 말던 코드에는 2개이상 쓸수가 없습니다.
  • 그러니까, 동사를 두개 쓰고 싶을 때에 대한 답은, 못 해요 입니다.

놀라운 사실

  • is는 사실 동사입니다.
  • isPlayVideo()는 동사가 두개입니다. 그러니까 틀린 코드죠

동명사

  • 동명사-ing 형태로 이루어진 문법입니다.
  • 간단히 말하자면 동사명사 로 만들어줍니다.
  • 동사를 두개이상 못쓰는 제약에서 구세주 역할을 합니다.
  • 그러니까 위의 함수는 isPlayingVideo()란 이름으로 작성하시면 됩니다.

복수형

  • 3인칭 단수는 일반적으로 동사 + s 형태가 와야 합니다.
  • have => has
  • contain => contains
  • 그러니까 player.haveItem() 이 아니라 player.hasItem() 이여야 합니다.
  • [apple, banana, kiwi] 또한 3인칭 단수 입니다.
  • 왜냐면 과일 3개를 가리키는게 아니라, 과일 3개를 담고있는 배열 을 가리키기 때문에요
  • 그러니까 [apple, banana, kiwi].contains(lemon) 이 되어야 합니다.

수동태

  • pick선택하다 라는 뜻입니다.
  • 어쨌든 선택된 이라는 뜻은 아닙니다.
  • pickItem은 아이템을 고르라는 뜻이고, 선택된 아이템 이라는 뜻은 절대 아닙니다.
  • pickedItem을 사용하세요.
  • selectItem 이라는 변수명 또한 현재 선택된 아이템이라는 의미가 아닙니다.

말줄임

  • 축약어는 사용하지 않는것이 좋습니다.
  • Managementmgt로 줄이는 사람이 있고 mgmt로 줄이는 사람이 있습니다.
  • 마찬가지로 Arrayarr로 줄이는 사람과 ary로 줄이는 사람이 있습니다.
  • 모든 팀원들이 축약어를 안쓰기로 하면 모든 변수명이 일치하겠지만, 일단 한번 쓰기 시작하면 걷잡을 수 없습니다.
  • 분명 ary를 쓰는 사람이 있을 것이고, 어떤 사람은 arr로 변수명을 짓기 시작합니다.
  • 단어 몇개 정도야 똑같은 축약어를 쓰기로 약속하면 되겠지만, 영어에는 수천가지 단어가 존재합니다.

예외

몇몇 축약어는 엄청나게 많이 쓰이고있고, 혼동될 여지가 없습니다.

아래의 축약어들은 사용해도 나쁜 코드가 되지는 않습니다. 다만 한번 줄였으면 코드의 모든 부분에서 줄이고, 안줄였으면 모든 부분에서 줄이지 마세요.

  • position - pos
  • image - img
  • texture - tex
  • index - idx
  • convert - cvt (약간 애매함)

대소문자

  • nicknamenick + name 으로 보이지만 어쨌든 한 단어입니다. 단어의 어원은 저도 모릅니다. 하지만 nickName 이라고 쓰면 안되는것은 분명합니다.
  • countDown, userName, upTime
  • weekDay, downLoad, upLoad
  • blackList, whiteList

반의어

  • enable의 반대는 inactive가 아닙니다. disable 입니다.
  • 마찬가지로 accept의 반대는 reject 입니다. (disallow, deny 는 오답입니다.)
  • 당연한 말이지만 setget과 짝을 이루어야 합니다.

사역동사와 단어의 어감

  • (이 부분은 일반적인 옳고 그름을 떠나, 개인의 코딩 스타일과 관련 있는 부분입니다.)
  • (그러니까 굳이 아래 써있는것 처럼 하지 않아도 되지만, 한번 읽어보는것은 도움이 될 것이라고 생각합니다.)
  • 이 주제에 대한 가장 대표적인 단어는 createmake 입니다.
    • 두 단어 모두 한국어로는 만들다라는 뜻을 가지고 있습니다.
    • make는 재료들을 가지고 물리적인 무언가를 만들어내는 느낌이 강합니다.
    • 또한 물리적으로 재료를 투입해서 무언가를 만들었기 때문에 사용된 재료는 소멸되는 부가적인 효과도 있겠지요.
    • create는 조금 더 추상적입니다. 물리적이고 아니고의 여부는 중요하지 않지만, 아무래도 무에서 유를 창조하는 경우에 사용한다고 할 수 있습니다.
  • 이번엔 createObject()makeObject()로 함수 이름을 지었을때를 생각해 보겠습니다.
    • 컴퓨터 공간에서의 객체들은 물리적으로 존재하지 않습니다.
    • 그리고 재료 를 가지고 만들지도 않습니다. 만들때 필요한것은 파라미터 정도겠네요.
    • 거기에 사용된 파라미터 또한 객체를 만든다고 일부가 소실되거나, 없어지지도 않습니다.
    • 그러니까 대부분의 경우에는 createObject()가 좀 더 적합하겠네요.
    • CRUD 란 말을 들어 보셨나요? 이미 실제로도 생성 의 의미에는 Create쪽이 더 많이 쓰이고 있습니다.

단어의 어감

  • 단어의 어감은 정말 중요합니다.
  • getUsers()는 이미 메모리상에 존재하는 유저를 단순히 반환할것 같은 느낌을 줍니다.
  • queryUsers()는 DB 혹은 서버에서 유저를 조회해서 반환할것 같은 느낌을 줍니다.
  • 물론 getUsers()가 비동기 함수이고, 실제로 서버에 다녀올수도 있습니다. 하지만 이 두가지를 구분해주는것은 API 사용자로 하여금 내부 동작을 추측하기 쉽게 해줄 것입니다.
    • 여기서 중요한것은 get이면 로컬에서 실행하고 DB 호출은 query를 사용하라는것이 아닙니다.
    • 이것은 개발자 영어랑도, 클린 코드와도 관련 없는 그냥 네이밍 컨벤션입니다.
    • 중요한것은, 만약 두가지 다른 동작을 하는 함수가 있고, 구분 이 가능하면 가능한 한 구분하여 이름으로부터 동작을 추측 가능하게 하세요.
  • 영어에는 수많은 단어들이 있습니다.
  • 변경하다 라는 뜻을 가진 단어, 그중에 코드에 많이 사용하는것은
  • set, update, change, modify, apply 가 있겠네요.
  • 각 단어들은 정확히 같지는 않지만 대충 비슷한 뜻을 가지고 있고, 어감은 조금씩 다릅니다.
  • 어떤 단어를 사용하는지는 자유지만 항상 일관성을 가지는것이 중요합니다.
  • 그러니까, 회원 정보를 변경하는 코드를 작성할 때
  • 이메일 변경은 setEmail(), 비밀번호를 변경하는 함수는 changePassword()라면 좀 안좋겠죠
  • 이러한 실수는 비밀번호 변경을 영어로 하면 setPassword가 아니라 change 혹은 update 로 시작하는 문장이 나오기 때문에 그럴겁니다.
  • 아쉽게도 UI 텍스트와 함수 작명은 별로 관련이 없어야 할 경우가 많습니다.
  • 아니면 차라리 이메일도 changeEmail()로 이름을 지어주세요.

사역동사

  • 사역동사에는 몇가지가 있지만 코드를 짜면서 필요한것은 아마 make밖에 없습니다.
  • make(무에서 유를) 만들다 보다 ~하게 만들다 의 의미로도 많이 쓰입니다.
  • 무에서 유를 창조하는 동작(오브젝트 생성)에는 create를 쓰세요.
  • makeEnemy() => createEnemy()

네이버 사전에서 make의 의미는 20개입니다

  • 그중에는 (…을 …으로[…이 되게]) 만들다[하다/삼다] 이라는 의미도 있습니다.
  • 주어진 파라미터(들) 로 거의 형변환 수준의 간단한 작업을 해서 원본과 별 차이가 없는 데이터를 반환하는 함수들은 make로 시작합니다.
  • 적당한 예로 makeInt(str)가 있습니다.
  • 실제 프로젝트에서 사용하는 예시로는 여기가 있습니다.
  • 눈치채셨을수도 있지만 toInt() 혹은 toRef()로도 대체 가능합니다. 이것은 취향의 영역입니다.
  • 하지만 createInt()createRef()는 아무래도 어색하죠
  • 언제 make를 사용하는지는 전적으로 개발자의 마음입니다. 다만 사역동사로써의 make와 만들다의 make를 코드 여기저기에 혼용하는건 좋지 않아 보이겠네요.

마치며

  • 언어는 완벽한 설계를 가진 물건이 절대 아니기 때문에 항상 예외케이스가 있으며
  • 실제로 코드를 작성할때는 위의 법칙에 맞지 않는 경우도 분명히 존재합니다.
  • 모든 예외케이스를 설명하면 글이 너무 난잡해질것 같아 전부 설명하지는 않았습니다.
    • 가장 좋은 예시로 react 스타일 컨벤션인 setIsPlaying(true)이 있겠네요.
  • 그래도 아주아주 대부분의 경우에는 맞는 말이라고 생각합니다. 예외케이스는 예외케이스고, 최대한 맞춰서 작성해 주시면 좋은 코드에 한발자국 더 다가갈 수 있습니다.
profile
다른 곳에서 볼 수 없는 이상한 주제를 다룹니다. https://pjc0247.github.io/new-home

0개의 댓글