2장: 의미 있는 이름

TIL (Today I Learned)

2022.02.20 (SUN)

📕 오늘 읽은 범위

2장. 의미 있는 이름

💡 책에서 기억하고 싶은 내용

  • 의도를 분명히 밝혀라 (p. 22-23)

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

    • 문제는 코드의 단순성이 아니라 코드의 함축성이다. 다시 말해, 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다.

  • 그릇된 정보를 피하라 (p. 24-25)

    • 실제 컨테이너가 List인 경우라도 컨테이너 유형을 이름에 놓지 않는 편이 바람딕하다.

    • 일관성이 떨어지는 표기법은 그릇된 정보다.

  • 의미 있게 구분하라 (p. 25-26)

    • 연속적인 숫자를 덧붙인 이름(a1, a2, ... aN)은 의도적인 이름과 정반대다.

    • 불용어를 추가한 이름 역시 아무런 정보도 제공하지 못한다.

    • Info나 Data는 a, an, the 와 마찬가지로 의미가 불분명한 불용어다.

    • 변수 이름에 variable이라는 단어는 단연코 금물이다.

  • 발음하기 쉬운 이름을 사용하라 (p. 27)

  • 검색하기 쉬운 이름을 사용하라 (p. 28)

    • 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 뛰지 않는다

    • 간단한 메서드에서 로컬 변수만 한 문자를 사용한다. 이름 길이는 범위 크기에 비례해야 한다.

  • 인코딩을 피하라 (p. 29-31)

    • 자바 프로그래머는 변수 이름에 타입을 인코딩할 필요가 없다. 객체는 강한 타입(strongly typed)이며, IDE는 코드를 컴파일하지 않고도 타입 오류를 감지할 정도로 발전했다.

    • 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 택하겠다.

  • 자신의 기억력을 자랑하지 마라 (p. 31)

    • 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 못하다.

    • 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다.

  • 클래스 이름 (p. 32)

    • 클래스 이름과 객체 이름은 명사나 명사구가 적합하다.

  • 메서드 이름 (p. 32)

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

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

    • 메서드는 인수를 설명하는 이름을 사용한다.

  • 한 개념에 한 단어를 사용하라 (p. 33)

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

  • 말 장난을 하지 마라 (p. 34)

    • 한 단어를 두 가지 목적으로 사용하지 마라.

    • 프로그래머는 코드를 최대한 이해하기 쉽게 짜야한다. 집중적인 탐구가 필요가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.

  • 의미 있는 맥락을 추가하라 (p. 35)

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

  • 불필요한 맥락을 없애라 (p. 37)

    • 일반적으로는 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 경우에 한해서다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다.

✏️ 소감 및 생각

"프로그래머는 코드를 최대한 이해하기 쉽게 짜야한다. 집중적인 탐구가 필요가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다."

  • 이해하기 쉽게 짜야한다는 말에 공감한다. 작성한 프로그래머에게 코드의 설명이 필요하다면, 깨끗하지 못한 코드인 것이다.

❓ 궁금한 내용 | 잘 이해되지 않는 내용

  • JavaBean conventions 에 대해 알아보았다.

    • 클래스는 직렬화되어야 한다. (클래스의 상태를 지속적으로 저장 혹은 복원 시키기 위해)

    • 클래스는 기본 생성자를 가지고 있어야 한다.

    • 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.

    • 클래스는 필요한 이벤트 처리 메서드들을 포함하고 있어야 한다.

Last updated