의미 있는 이름

minjeong·2022년 12월 13일
0

Clean Code

목록 보기
2/2
When you try to choose a meaningful variable name

의미 있는 이름 쓰는 법

의도를 분명히 밝혀라

  • 변수, 함수, 클래스의 존재 이유나 수행 기능, 사용 방법이 주석 없이도 이해될 수 있게 작성되어야 한다.
  • 네이밍을 너무 함축적으로 할 경우 코드 맥락이 코드 자체에 드러나지 않는다.

그릇된 정보를 피해라 / 의미 있게 구분하라

  • 약어가 다른 의미로 혼동될 수 있을 경우 사용을 피한다. (ex. add -> address or addition, dir -> direction or directory)
  • 자료구조 등과 같이 프로그래머에게 특수한 의미를 가진 단어를 사용할 때 주의한다. (ex. accountList: HashMap<Account>)

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

  • genymdhms(generate year-month-day-hour-minute-seconds) vs. generationTimestamp
  • 이름의 길이는 범위 크기에 비례해야 한다.
    • 간단한 메서드 내에서 사용되는 로컬 변수의 경우 한 단어 정도로 짧을 수 있겠다.
    • 코드 여러 곳에서 사용하는 변수나 상수는 검색하기 쉬우면서 정확한 의미를 표현해야 한다.
  • 검색하기 쉽다 = 긴 이름이 구체적이고 프로젝트 코드 내 사용처가 특정적이다.

인코딩을 피하라

  • IDE가 발전하여 이제 코드 컴파일 이전에도 타입 오류를 감지할 수 있고, 빠른 확인이 가능해졌다. 따라서 네이밍에 타입을 기억할 단서를 넣지 않아도 된다.
  • (ex. phoneString) 변수, 함수, 클래스 이름이나 타입을 바꾸기 어려워질 뿐이다.

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

  • 일반적으로 사용하는 용어, 문맥상 이해 가능한 단어를 사용하여 이름의 의미를 기억하지 않고도 직관적으로 이해할 수 있어야 한다.

한 개념에 한 단어를 사용하라 / 말장난을 하지 마라

  • add와 append와 같이 공통 기능을 구분하라.
  • 이미 사용한 단어를 혼란스럽게 두 가지 목적으로 사용하지 마라.

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

  • 문제 영역: domain → 도메인(비지니스 로직 등)의 개념과 관련이 깊은 코드라면 문제 영역에서 가져와 이름을 쓰는 것이 더욱 의미가 분명하다.
  • 해법 영역: programming → 프로그래머로서 알 수 있는 전산, 알고리즘, 설계 패턴, 수학 등의 용어를 사용하면 코드를 일고 쓸 다른 프로그래머에게도 의미가 분명하다.

불필요한 맥락을 없애라

  • 제외시켜도 이해에 전혀 문제가 없는 과다한 맥락과 의미의 단어는 제외시킨다. 그것이 더욱 가독성있게 만든다.

예제 연습해보기

// 적폐 코드 (before)
// 지뢰찾기 게임의 깃발 꽂혀진 칸 배열 반환하는 함수
// input param: arr -> 지뢰찾기 전체 이차원 배열
public getThem(arr): any[] {
  let list: Array<any> = [];
  for (let x of arr) {
    for (let y of x) {
      if (y === 1) {
        list.push(y);
      }
    }
  }
  return list;
}
// 개선해본 코드 (after) 22.12.13
public getFlaggedCells(board: Board): BoardCell[] {
  let flaggedCells: Array<BoardCell> = [];
  for (let row of board) {
    for (let cell of row) {
      if (cell.isFlagged()) {
        flaggedCells.push(cell);
      }
    }
  }
  return flaggedCells;
}

출처

《클린 코드》, 22-38p

profile
프론트엔드 개발자 👩‍💻

0개의 댓글