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