[클린코드: Clean Code] 2장 의미있는 이름

devssun 2019. 7. 31. 22:46
728x90
반응형

소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 지으면 편하다.

 

의도를 분명히 밝혀라

변수 이름을 의도를 분명하게 짓는 것은 정말 중요하다. 좋은 이름을 지음으로 시간을 절약할 수 있다

간단한 문장 속에도 변수의 의도를 파악하기 힘든 이름으로 되어있다면 변경이 필요하다.

 

그릇된 정보를 피하라

예로 여러 계정을 그룹으로 묶을 때, 실제 List가 아닌데 accountList 라는 이름은 맞지 않다.

보통 프로그램에서 List는 나열된 데이터를 의미하기 때문이다. 이런 경우 그릇된 정보를 전달할 수 있다.

또 서로 비슷한 이름을 쓰는 것, o / l / I / 과 같이 비슷한 문자로만 이루어진 변수는 자제할 것!!

 

의미 있게 구분하라

Product라는 클래스가 있을 때, 다른 클래스를 ProductInfo 혹은 ProductData라고 부른다면 개념을 구분하지 않은 채 이름만 달리한 경우라고 할 수 있다.

저 세개의 차이를 구분할 수 있는가? 내가 제품 정보를 저장하려 할 때 위 세개 클래스 중 어느 클래스를 사용해야 할까?

읽는 사람이 차이를 알도록 이름을 지어라

 

발음하기 쉬운 이름을 사용하라

이건 함축 단어 사용을 자제하라고도 볼 수 있겠다

 

클래스 이름

클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 동사는 사용하지 않는다.

예시 : Manager, Processor, Data, Info 등과 같은 단어는 피한다

 

메서드 이름

메서드 이름은 동사나 동사구가 적합하다.

 

한 개념에 한 단어를 사용하라

추상적인 개념 하나에 단어 하나를 선택이 이를 고수한다

만일 "가져온다" 는 액션이 있을 때 fetch, retrieve, get으로 각각 부르면 혼란스럽다.

또 예로 controller, manager, driver 를 섞어쓰면 구분하기 힘드므로 바꿔야한다.

 

의미 있는 맥락을 추가하라

스스로 의미가 분명한 이름이 없지 않지만 대다수 그렇지 않다.

그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.

 

예를 들어, firstName, lastName, state, zipcode 변수가 있다면 이게 사용자 주소라는 사실을 알 수 있다

하지만 state 하나만 사용한다면? state가 주소 일부라는 사실을 금방 알아채긴 쉽지 않다.

 

그래서 이 경우 addr 이라는 접두어를 붙여 addrState 라고 한다면 해당 변수가 주소 일부라고 알 수 있다.

 

불필요한 맥락을 없애라

일반적으로 짦은 이름이 긴 이름보다 좋다. (단, 의미가 분명한 경우)

이름에 불필요한 맥락을 추가하지 않도록 주의한다.


2장을 읽으면서 단순히 이름을 이렇게 지어봐~! 가 아니라 자세한 예시를 대며 이렇게 이렇게 지으면 너한테도 도움이 될 거다 라고 하니 읽기 좋았다

안그래도 프로젝트에서 모델 클래스 이름이 상당히 비슷한 부분이 있어 (어쩌구Data, Detail 이런 식으로 만듦..) 바꿔야겠다고 생각했다

나뿐 아니라 다른 사람도 읽었을 때 이해하기 쉬운 이름으로!!

 

이름을 잘 짓자

 


함께 읽으면 좋은 자료

https://soojin.ro/blog/naming-boolean-variables

 

Bool 변수 이름 제대로 짓기 위한 최소한의 영어 문법 · Soojin Ro

Background 프로그래머의 가장 어려운 업무가 이름 짓기라는 설문 결과도 있듯이 변수에 적절한 이름을 지어주는 것은 어렵고 오래걸리는 일이다. 영어가 모국어가 아닌 사람들에게는 더 어려울 수 밖에 없는데 특히 Bool 변수명을 올바르게 지으려면 몇가지 영문법을 숙지해야한다. Bool 변수명은 사소한 차이로도 의미가 많이 바뀌어 코드를 읽는 사람을 더 헷갈리게 할 수도 있기 때문에 조금이라도 더 명확하고 문법적으로 맞는 Bool 변수명을 짓는 것이 중

soojin.ro

https://soojin.ro/blog/english-for-developers-swift

 

Swift 개발자처럼 변수 이름 짓기 · Soojin Ro

1979년에 발간됐지만 여전히 프로그래밍 입문서로 유명한 Structures and Interpretation of Computer Programs의 도입부에 이런 말이 있다. Programs should be written for people to read, and only incidentally for machines to execute. (내맘대로 의역) 프로그램은 사람들에게 읽히기 위한 목적으로 만들어져야 하고, 우연히 컴퓨터가 실행할 수 있다면

soojin.ro

 

반응형