[Clean Code] 클린 코드(Clean Code) 2장 '의미 있는 이름' 요약

jiveloper·2022년 12월 10일
0

Clean Code

목록 보기
2/6
post-thumbnail
post-custom-banner

2장 의미 있는 이름

의도를 분명히 밝혀라

"의도가 분명하게 이름을 지으라"고 말하기는 쉽다. 여기서는 의도가 분명한 이름이 정말로 중요하다는 사실을 거듭 강조한다. 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 그러므로 이름을 주의 깊게 살펴 더 나은 이름이 떠오르면 개선하기 바란다.

변수나 함수 그리고 클래스 이름은 존재 이유, 수행 기능과 사용 방법과 같은 굵직한 질문에 모두 답해야 한다.
따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

👩🏻‍💻 💡 끼어들기
정말 동감한다. 코드로 코드를 잘 설명 할 수 있다면 진정한 클린 코드가 아닐까 싶다.


그릇된 정보를 피하라

프로그래머는 다음과 같은 사항들로 인해, 코드에 그릇된 단서를 남겨서는 안 된다. 그릇된 단서는 코드 의미를 흐린다.

  • 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안 된다.

  • 서로 흡사한 이름을 사용하지 않도록 주의한다.

  • 유사한 개념은 유사한 표기법을 사용한다. 일관성이 떨어지는 표기법은 그릇된 정보다.


의미 있게 구분하라

컴파일러나 인터프리터만 통과하려는 생각으로 코드를 구현하는 프로그래머는 스스로 문제를 일으킨다.

  • 동일한 범위 안에서는 다른 두 개념에 같은 이름을 사용하지 못한다.

  • 컴파일러를 통과할지라도 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다. 이름이 달라야 한다면 의미도 달라져야 한다.

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


검색하기 쉬운 이름을 사용하라

  • 긴 이름이 짧은 이름보다 좋다.

  • 검색하기 쉬운 이름이 상수보다 좋다.

  • 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.

👩🏻‍💻 💡 끼어들기
나도 이름이 좀 긴 한이 있더라도, 짧은 이름으로 의미를 애매하게 하는 것보단 낫다고 생각한다. 이름이 길어지면 표현하고자 하는 함수나 클래스에 대한 의미가 좀 더 분명해진다고 생각하기 때문이다. (개인적으로 이름이 길어지면 5음절까지는 적당하다고 생각한다.)


인코딩을 피하라

이름에 인코딩할 정보는 아주 많다. 유형이나 범위 정보까지 인코딩에 넣으면 그만큼 이름을 해독하기 어려워진다. 또한, 인코딩한 이름은 거의가 발음하기 어려우며 오타가 생기기도 쉽다.

인터페이스 클래스와 구현 클래스

개인적으로 인터페이스 이름은 접두어를 붙이지 않는 편이 좋다고 생각한다. 옛날 코드에서 많이 사용하는 접두어 I는 (잘해봤자) 주의를 흐트리고 (나쁘게는) 과도한 정보를 제공한다.

👩🏻‍💻 💡 끼어들기
요건 살짝 애매하다. 나는 인터페이스 이름 앞에 I 붙이는게 (지금은) 편하고 실제로 현업에서 그렇게 하고 있는데, 이 부분은 개인 성향 차이가 좀 있지 않을까 싶다.


자신의 기억력을 자랑하지 마라

문자 하나만 사용하는 변수 이름은 문제가 있다. 루프에서 반복 횟수를 세는 변수 i, j, k는 괜찮다. (I는 절대 안 된다!) 단, 루프 범위가 아주 작고 다른 이름과 충돌하지 않을 때만 괜찮다.

똑똑한 프로그래머와 전문가 프로그래머 사이에서 나타나는 차이점 하나만 들자면, 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. 전문가 프로그래머는 남들이 이해하는 코드를 내놓는다.


클래스 이름

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

  • Customer

  • WikiPage

  • Account

  • AddressParser


메서드 이름

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

접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.

  • string name = employee.getName();

  • customer.setName("mike");

  • if (paycheck.isPosted())...

생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다.

(❌)

Complex fulcrumPoint = new Complex(23.0)

(⭕️)

Complex fulcrumPoint = Complex.FromRealNumber(23.0);

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 메서드 이름은 독자적이고 일관적이어야 한다. 일관성 있는 어휘는 코드를 사용할 프로그래머가 반갑게 여길 선물이다.


의미 있는 맥락을 추가하라

대다수 이름은 스스로 의미가 분명하지 않다. 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.

firstName, lastName, state (❌)
addrFirstName, addrLastName, addrState (⭕️)

👩🏻‍💻 💡 끼어들기
정말 공감하는 부분이다. 음절이 조금 길어지더라도 의미 있게 이름을 잘 짓는 것을 추천한다.


마치면서

우리는 문장이나 문단처럼 읽히는 코드 아니면 적어도 표나 자료 구조처럼 읽히는 코드를 짜는 데만 집중해야 마땅하다. 코드를 개선하려는 노력을 중단해서는 안된다.

다른 사람이 짠 코드를 손본다면 리팩토링 도구를 사용해 문제 해결 목적으로 이름을 개선하라. 단기적인 효과는 물론 장기적인 이익도 보장한다.




-알라딘 eBook <클린 코드 Clean Code> (로버트 C. 마틴 지음, 이해영.박재호 옮김) 중에서

profile
👩🏻‍💻 Clean Code와 Refactoring에 관심이 많은 개발자 입니다.
post-custom-banner

0개의 댓글