[Clean Code] Ⅱ.의미 있는 이름

Clean Code 3판을 읽고 정리한 글입니다

Ⅱ. 의미 있는 이름

이름을 잘 짖는 간단한 몇가지 규칙

  1. 의도를 분명히 밝혀라
  • 변수명이나 메서드 명에서 정확하게 의도를 알 수 있는 이름
  1. 그릇된 정보를 피하라
  • 그릇된 단서 : 널리 쓰이는 단어를 다른 의미로 사용, 자료구조 이름을 다른 뜻으롷 사용하는 등
  • 역시 이름만 바꾸면 깨끗이 풀리는 문제들
  1. 의미 있게 구분하라
  • 컴파일러/인터프리터만 통과하려는 식의 구현 : 의미 없는 이름 혹은 고민하지 않은 이름들
  • 이름이 달라야 한다면 의미도 달라져야한다
  • 읽는 사람이 차이를 알도록 이름을 지어야 한다
  1. 발음하기 쉬운 이름을 사용
  • 발음하기 어려운 이름은 커뮤니케이션도 어려움
  1. 검색하기 쉬운 이름을 사용
  • 예제 책등에서 보이는 문자 하나를 사용하는 이름/상수는 쉽게 눈에 띄지 않는다
  • ex) e는 영어에서 가장 많이 쓰이는 문자 → 검색을 해서 follow하기가 불가능
  • 검색하기 쉬운 이름이 상수보다 좋다
  • 이름 길이는 범위 크기에 비례해야한다
    • 아주 간단한 메서드의 로컬 변수는 한 문자 사용 가능
    • 변수나 상수를 코드 여러 곳에서 사용한다면 그만큼 검색하기 쉬운 이름이 바람직
  1. 인코딩을 피하라
  • 이름에 인코딩(!)할 정보는 어차피 아주 많음
  • 인코딩한 이름은 거의 발음하기 어려우며 오타가 생긴다
  • 대표적인 예시 : 이제 필요없는 기법들
    • 헝가리식 표기법(인코딩 대표방법)
    • 멤버 변수 접두어
  • 필요한 경우 : 인터페이스와 구현 클래스
    • 굳이 하나를 인코딩해야 한다면 구현 클래스의 이름 ex)~~~FactoryImp
  1. 자신의 기억력을 자랑하지 마라
  • 문자 하나만 사용 피하라
    • 루프의 반복횟수를 세는 변수 i,j,k는 ok(l은 절대안된다!)
    • 최악 이미 a와 b를 사용하므로 c를 사용
  • 프로그래머들으 대체로 똑똑 : 자신의 능력을 과시하고 싶음
  • 똑똑한 vs 전문가 : 전문가는 명료함이 최고라는 사실을 이해한다
  1. 클래스 이름
  • 클래스 이름, 객체 이름은 명사,명사구가 적합
  • Manager, Processor, Data, Info등의 단어는 피하고 동사 사용 X
  1. 메서드 이름
  • 메서드 이름은 동사,동사구가 적합
  • 접근자,변경자,조건자는 javabean표준에 따라 get,set,is를 붙인다
  • Construct를 overload할때는 정적 팩토리 메서드를 사용한다(생성자 제한으로 private해버리기)
  1. 기발한 이름은 피하라
  • 유머코드, 농담 코드를 넣지 말자
  • 특정 문화에서만 사용되는 단어/농담은 피하라
  • 재미난 이름보다는 명료한 이름을 선택 : 의도분명, 솔직하게 표현
  1. 한 개념에 한 단어 사용
  • 추상적 개념 하나에 한 단어 고수 : 아니면 어느 클래스에서 어떤 단어를 썼는지 알기 어려움
  • 동일 코드에 다른 이름? 읽는 사람은 클래스도 다르고 타입도 다르리가고 생각함
  1. 말장난 금지
  • 한 단어를 2가지 목적으로 사용하지 마라
  • 한 개념에 한 단어를 사용하라 하더라도 기존과 맥락이 다르다면 이름을 다르게 해야한다
  • 집중적 탐구가 아니라 대충 훑어봐도 이해할 코드 작성이 목표
  1. 문제 영역에서 가져온 이름 사용하라
  • 문제영역과 해법영역을 구분할 것
  • 적절한 프로그래머 용어가 없는 문제 영역 개념과 관련이 깊은 코드라면 문제영역에서 이름을 가져온다
  • 유지보수 프로그매러가 도메인 전문가에게 의미를 물어 파악 가능
  1. 의미 있는 맥락을 추가
  • 스스로 의미 있는 이름 먼저 → 클래스, 함수, 이름공간에 넣어 맥락 부여 → 전부 실패하면 최후의 방법으로 접두어
  1. 불필요한 맥락을 없애라
  • 의미가 분명한 경우라면 짧은 이름이 긴 이름보다 좋다 : 불필요한 맥락 추가X

구글 자바 스타일 가이드

  • p31 인터페이스 클래스와 구현 클래스 부분
    • 밥 아저씨는 ShapeFactoryImp가 좋다고 하지만 CircleFactory가 훨씬 좋음
  • 구글 자바 스타일 가이드에서 5번째 : https://google.github.io/styleguide/javaguide.html
    1. 패키지 이름 : 모두 소문자, 언더스코어 없이
    2. 클래스 이름
    • UpperCamelCase(대문자 시작)
    • 명사/명사구
    • 인터페이스도 명사/명사구이지만 때때로 형용사/형용사구 ex)Readable
      (그러면 클래스는 ClassImplReadable 이런식으로)
    • 테스트 클래스는 Test로 끝나야 한다
    1. 메서드 이름
    • lowerCamelCase(소문자 시작)
    • 동사/동사구
    • JUnit test 메서드에서 한해서 언더스코어 등장
      • 패턴 : <methodUnderTest>_<state>, for example pop_emptyStack
    1. 상수 이름
    • 상수 : 완전 불변,ㅡ 메서드 감지 가능한 부작용 없는 static final
    • 인스턴스의 상태가 변경될 수 있는 경우 상수가 아님 : 단순히 객체변형을 막는것이 목적이 아니다
    • CONSTANT_CASE : 모두 대문자, 언더스코어(_)로 각 단어 구분
    1. 상수가 아닌 필드 이름
    • lowerCamelCase
    • 정적이나 다른것들 ㅂ포함
    1. 파라미터
    • lowerCamelCase
    • public 메서드일때 한 글자 파라미터 이름은 피해야 한다
    1. 지역 변수
    • lowerCamelCase
    • final, 불변이어도 지역변수는 상수로 간주 되지 않으며, 상수 스타일 지정하지 말아야
    1. Type 변수 이름
    • 단일 대문자, 추가적으로 한자리 숫자가 따라올수 있음(E,T,X,T2)
    • 클래스 명명 규칙+ T : (RequestT, FooBarT)

Related POST

공유하기