[클린코드 TS] 변수

moonee·2021년 7월 29일
0

클린코드

목록 보기
1/5

본 게시글은 책 클린코드와 클린코드 타입스크립트 을 정리한 내용입니다

좋은 코드란 무엇인가

  • 한가지에 집중하는 코드
  • 오류 처리를 제대로 하는 코드
  • 가독성이 좋은 코드 ( 다른 사람이 고치기 쉽다 )
  • 속도와 CPU 자원을 낭비하지 않는 코드


의미 있는 이름 짓기

1. 의도를 분명히 밝혀라

주석 없이도 아래와 같은 질문에 모두 답해야한다.

  • 변수/함수의 존재 이유
  • 수행 기능
  • 사용 방법
// 시간 혹은 날짜
let d // 시간, 날짜라는 느낌이 안든다.

let elapsedTimeInDays
let daysSinceCreation
let daysSinceModificaton
let fileAgeInDays

Bad

function getTheme() {
  const list = []
  for (const x of theList) {
    if (x[0] === 4) list.push(x)
  }
  return list
}
  • thsList에 무엇이 들어있는지 모른다.
  • theList에서 0번째 값이 왜 중요한지 모른다.
  • 값 4는 무슨 의미인지 모른다.
  • 함수가 반환하는 리스트 list를 어떻게 사용하는지 모른다.

Good

function getFlaggedCells() {
  const flaggedCells = []
  for (const cell of gameBoard) {
    if (cell[STATUS_VALUE] === FLAGGED) flaggedCells.push(cell)
  }
  return flaggedCells
}

2. 그릇된 정보를 피하라

  • 서로 흡사한 이름을 사용하지 않도록 한다.
  • 유사한 개념은 유사한 표기법을 사용한다. 일관성이 떨어지는 표기법은 그릇된 정보이다.

3. 의미있게 구분해라

  • productDataproductInfo는 개념을 구분하지 안흔 채 이름만 달리한 경우이다.
  • 읽는 사람이 차이를 알도록 이름을 지어라

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

  • 결국 개발자들끼리 변수명을 통해 소통해야하므로 발음하기 쉬워야한다.
  • 발음하기 쉽다는 것은 그만큼 의미가 명확하다는 뜻이기도 하다.

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

  • 이름 길이는 범위 크기에 비례해야하 한다.
  • 변수나 상수를 코드 여러곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.
  • 예를 들어 단순히 날짜에 d 라는 변수명을 사용했을 경우에는 찾기 힘들다.

6. 클래스 이름

  • 클래스 이름, 객체 이름은 명사나 명사구가 적합하다.
  • Customer, Account, AddressParser
  • Manager, Processor, Data, Info 등과 같은 단어는 피하자

7. 메서드 이름

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

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

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
  • 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.

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

  • 전산용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 좋다.

10. 문제 영역에서 가져온 이름을 사용하라


11. 의미 있는 맥락을 추가하라

  • firstName, lastName, street, houseNumber, city, state, zipcode
  • 위의 변수에 addr 라는 접두어를 추가해 addrFirstName, addrLastName과 같이 쓰면 주소라는 의미를 추가해주어 맥락이 더 분명해진다.

12. 불필요한 맥락을 없애라

Bad

type Car = {
  carMake: string
  carModel: string
  carColor: string
}

function print(car: Car): void {
  console.log(`${car.carMake} ${car.carModel} (${car.carColor})`)
}

Good

type Car = {
  make: string
  model: string
  color: string
}

function print(car: Car): void {
  console.log(`${car.make} ${car.model} (${car.color})`)
}


변수 올바르게 사용하기

1. short circuiting 이나 조건문 대신 기본 매개변수를 사용하라

Bad

function loadPages(count?: number) {
  const loadCount = count !== undefined ? count : 10
  // ...
}

Good

function loadPages(count: number = 10) {
  // ...
}

2. 의도를 알려주기 위해 enum 을 사용하라

  • 값 자체보다, 값이 구별 되어야 하는 상황에 enum을 사용하라

Bad

const GENRE = {
  ROMANTIC: 'romantic',
  DRAMA: 'drama',
  COMEDY: 'comedy',
  DOCUMENTARY: 'documentary',
}

projector.configureFilm(GENRE.COMEDY)

class Projector {
  // Projector의 선언
  configureFilm(genre) {
    switch (genre) {
      case GENRE.ROMANTIC:
      // 실행되어야 하는 로직
    }
  }
}

Good

enum GENRE {
  ROMANTIC,
  DRAMA,
  COMEDY,
  DOCUMENTARY,
}

projector.configureFilm(GENRE.COMEDY)

class Projector {
  // Projector의 선언
  configureFilm(genre) {
    switch (genre) {
      case GENRE.ROMANTIC:
      // 실행되어야 하는 로직
    }
  }
}


참고

profile
기록

0개의 댓글