감상문

영어 변수명을 잘 지어보자

ihl 2021. 2. 7. 23:33

youtu.be/rbSnkiqPnJI?list=PLsFtzQAC8dDfbf3Lb-2m1A7HOhjU-4H7m

 

코딩을 하면서 정말 어렵다고 느끼는 부분 중 하나가 바로 변수 이름짓기이다. 나 또한 유지보수를 위해 보기좋게 이름을 지어야하는 것을 느껴서 관련 책을 읽어본 적이 있는데 이건 이렇게 해라 라고 너무 많은 구체적 예시를 외우라는 식이기도 하고 언어마다 조금씩 달라서(ex. c에서 int형은 앞에 i를 붙이라고 하지만 javascript는 int형이 없다!) 내가 앞으로 이렇게 해야겠구나 하는 깨달음을 얻지는 못하였다. 그러나 위 발표를 통해 언어에 상관없이 이름을 어떤 생각으로 지으면 좋겠구나 하는 깨달음을 얻을 수 있었다.


str.replace('dog', 'monkey');

코드는 대부분 영어로 되어있기 때문에 영어를 잘 쓰는 것 만으로도 좋은 이름짓기를 할 수 있다. 위 코드는 주어(str을) + 동사(replace해라) + 목적어('dog' 문자열 부분을) + 어떻게('monky'로) 로 구성이 되어있다. (이 때 동사의 경우 replace해라 혹은 replace 당해라 둘다 혼용이 가능하다.) 따라서 영어 문장을 어법에 잘 맞게 쓴다면 해석하기도 쉬워질 것이다.

 

첫 번째로 생각해야할 점은 올바른 품사(명사, 동사, 형용사, 전치사)를 사용해야하는 것이다. 예를 들어 명사를 수식하기 위해서는 형용사를 쓰거나 명사를 써서 복합명사로 만들어주어야한다. 또한 동사의 경우 동사원형-과거형-과거분사형으로 변형되는 것에 주의하여야 한다. 먼저 동사원형은 함수/메소드/조동사 뒤에/LifeCycle 관련 delegate 일 때만 사용한다. 과거형은 사용하지 않고, 과거 분사형은 명사를 꾸미는 형용사로서만 사용한다(ex. removedData, isVisible).

 

두 번째로 Bool 형의 경우 영상의 13:35의 표를 보며 지으면 된다. 예를 들어 의미가 '~인가?' 인 경우는 is+명사로 짓고, '~되었는가?' 인 경우 has+과거분사로 지으면 된다. 이 때 주의할 점은 is+동사원형은 문법상 오류이므로 해석이 어려워지기 때문에 쓰면 안된다! Bool의 경우 긍정형으로 지을 것인가 부정형으로 지을것인가(isHide vs isVisible) 라는 이슈가 있는데 이 경우 기본적으로 기대하는 값에 따라 달라진다. 예를 들어 View의 경우 View를 만들었다면 보통 View가 보이는 상태일 것을 기대한다. 따라서 isVisible이 더 나은 표현인 것이다.

 

세 번째는 단수와 복수를 잘 구분하라는 것이다. 예를 들어 책 객체를 담은 배열의 경우 Books라 짓고, 책 클래스는 Book이라고 짓는 식이다.

 

네 번째는 타입별 네이밍 컨벤션을 잘 지키자는 것이다. IOS의 경우 타입이 URL인 경우 이름 뒤에 URL을 붙여야 하며, C의 경우 int형 변수 이름 앞에 i를 붙이는 것과 같은 것이다.

 

다섯번째는 실제 사용될 때를 고려하여 중복을 제거하라는 것이다. 예를 들어 User 클래스에 userID라는 속성이 있다고 생각해보자. userID 자체는 잘 지은 이름이지만 실제 사용할 때는 User인스턴스.userID라고 사용하게 되므로 user라는 부분이 중복될 가능성이 높다. 또다른 예로 ImageDownloader 클래스에 downloadImage 메소드가 있다고 생각해보자. downloadImage 자체는 좋은 이름이지만 실제 사용 시에는 ImageDownloader 인스턴스.downloadImage라고 사용하므로 코드에 download와 Image가 중복될 것이다, 따라서 함수 이름을 fetch로 바꾸던지, ImageDownloader 클래스를 ImageManager로 바꾸는 식으로 변경되어야 한다.

 

여섯번째는 메소드이름을 지을 때 컨벤션을 보고 어떤 경우에 어떤 동사를 쓰는지 확인하라는 것이다. 예를 들어 Swift에서 fetch는 비동기 작업 중에서도 결과를 바로 리턴하는 경우에만, request는 비동기 작업 중에서도 실패 가능성이 있는 복잡한 작업에만 사용한다.

 

그 외에 동사에 쌍이 있는 경우, 예를 들어 입력하는 함수를 Push라고 이름지었다면 빼내는 함수는 Pop이라고 이름지어야 한다, id의 경우 identifier라 늘려 쓰고 커스텀된 id인 경우 'recordID' 처럼 구체적으로 쓰면서 ID는 대문자로 사용하라는 내용도 있었다.


이 영상이 내가 본 이름짓기에 대한 여러 정보들 중에서 가장 와닿는 정보였다. 코드도 영어니까 당연히 올바른 문법을 써야 가독성이 좋아진다는 사실을 지금까지 간과하고 있었다. 또한 언어마다 Convention이라는 것이 있는데 언어가 달라지더라도 변수가 가지는 의미가 달라지는 것이 아니라는 생각으로 이를 무시하고 하던대로 코드를 짜고 있었던 것 같다. 이러한 점을 반성하고 먼저 JavaScript 컨벤션을 보러가야겠다! 또한 개발자가 영어를 잘해야 좋다는 것이 이러한 부분에서도 느껴지는구나 싶었다.ㅎㅎ;; 

 


JavaScript Convention

동의어 사전