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

0

Clean Code

목록 보기
2/7
post-thumbnail

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

이 포스팅은 <<Clean Code>>, 로버트 C. 마틴, 인사이트(2013)을 읽고 개인 학습용으로 정리한 글입니다.

의도를 분명히 밝혀라

  • 변수(or 함수 or 클래스)의 존재 이유, 수행 기능, 사용 방법
    • 주석이 필요하다면, 의도가 분명히 드러나지 않은 것

그릇된 정보를 피하라

  • 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다
    -> accountGroup, accounts 등으로 명명

의미있게 구분하라

  • a1,a2,a3 -> 아무런 정보를 제공하지 못하는 이름

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

  • ex.genymdhms -> generationTimeStamp

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

  • 검색하기 쉬운 이름이 상수보다 좋다
  • 긴 이름이 짧은 이름보다 좋다
    • 이름 길이는 범위 길이에 비례해야한다
    • 여러 곳에서 사용될 수록, 검색하기 쉬워야한다

인코딩을 피하라

  • 변수 이름에 타입을 인코딩할 필요 X
    -> 이름이나 타입을 바꾸기 어려워진다
  • 멤버 변수에 접두어 m_을 붙일 필요 X
  • 인터페이스 클래스에 접두어를 붙이지 X
    -> 사용자에게 과도한 정보 제공
    -> 차라리 구현 클래스에 접두어를 붙이는 것이 낫다
    (ex. IFactory, Factory 보다 Factory, CFactory 또는 Factory, FactoryImpl이 낫다)

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

  • 문자 하나만 사용하는 변수 이름 X
    (예외: 루프에서 반복문을 세는 i, j, k)

클래스 이름

  • 명사 또는 명사구, 동사 X
  • Manager, Processor, Data, Info 등의 단어는 피하라

메서드 이름

  • 동사 또는 동사구
  • javabean 표준
    • 접근자 앞에는 get 붙이기
    • 변경자 앞에는 set 붙이기
    • 조건자 앞에는 is 붙이기
  • 생성자 overload 할 때는 정적 팩토리 메서드 사용
    • 정적 팩토리 메서드 이름: 인수를 설명하는 이름

📌참고자료: 정적 팩토리 메서드 패턴 (Static Factory Method)

  • 정적 팩토리 메서드 패턴:
    객체를 인스턴스화할 때, 직접적으로 생성자를 호출하지 않고, 객체 생성 역할을 하는 클래스 메서드 호출을 통해 객체 생성을 유도하는 패턴
  • GoF의 Factory Method 패턴, Abstract Factory 패턴에서 팩토리 개념을 따와 심플하게 변형시킨 패턴
class Book {
    private String title;
    // private 생성자
    private Book(String title) { this.title = title; }
    // 정적 팩토리 메서드
    public static Book titleOf(String title) {
        return new Book(title); // 메서드에서 생성자 호출
    }
}
public static void main(String[] args) {
	// 정적 메서드 호출을 통해 객체를 인스턴스화
    Book book1 = Book.titleOf("어린왕자"); 
}

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

  • 추상적인 개념 하나에 단어 하나를 선택해 사용
    • ex. get, fetch, retrieve, ... 중 하나 선택
    • ex. controller, manager, driver, ... 중 하나 선택

해법 영역에서 가져온 이름을 사용하라

  • 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등 사용 O

의미있는 맥락을 추가하라

  • ex. 주소를 나타내는 변수들 state, city, street, zipcode
    -> 맥락 없이 보면, state 변수가 상태 변수인지 주소 변수인지 알기 어렵다
    • 대안(1) 접두어 붙이기 addrState, addrCity, addrStreet, addrZipcode
    • 대안(2) 해당 변수들을 포함하는 Adress 클래스 생성하기

불필요한 맥락을 없애라

  • 의미가 분명한 경우에는, 불필요한 맥락 추가 X
profile
Be able to be vulnerable, in search of truth

0개의 댓글