[Clean Code] 3. 함수

0woogie·2022년 4월 29일
0

오늘 읽은 범위

3장. 함수

책에서 기억하고 싶은 내용

  • 함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다. (p.42)
  • 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. (p.44)
  • 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p.44)
  • 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. (p.45)
  • 일반적으로 나는 switch 문을 단 한 번만 참아준다. 다형적 객체를 생성하는 코드 안에서다. (p.49)
  • 플래그 인수는 추하다. 함수로 부울 값을 넘기는 관례는 정말로 끔직하다. 왜냐고? 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈이니까! (p.52)
  • 함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다. (p.54)
  • 시간적인 결합은 혼란을 일으킨다. 특히 부수 효과로 숨겨진 경우에는 더더욱 혼란이 커진다. 만약 시간적인 결합이 필요하다면 함수 이름에 분명히 명시한다. (p.55)
  • 일반적으로 출력 인수는 피해야 한다. 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다. (p.56)
  • try/catch 블록은 원래 추하다. 코드 구조에 혼란을 일으키며, 정상 동작과 오류 처리 동작을 뒤섞는다. 그러므로 try/catch 블록을 별도 함수로 뽑아내는 편이 좋다. (p.58)

'Dirty Code' TO 'Clean Code'!

더러운 코드를 클린 코드로 바꾸는 과제가 있었다. 총 3문제로, 1번의 경우 SHINMJ1님의 리팩토링을 참고하였다.

[1번]

// BAD 더러운 코드 😣
// Hint❕ : 검색하기 쉬운 이름을 사용하세요.
// blastOFF는 로켓 발사를 의미. 86400000은 하루의 밀리초 (milliseconds) 의미. 

// What the heck is 86400000 for?
setTimeout(blastOff, 86400000);

// GOOD 😎
// 위 코드를 깨끗하게 다시 작성해 주세요.
const ONE_DAY_MILLISECONDS = 60 * 60 * 24 * 1000;
setTimeout(blastOff, blastOffTime); 


// 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요.
/**
# 어떻게 고쳤는지
  1. 변수명 수정
  - blastOFF -> rocketLaunch
  blastOFF 는 '발사' 라는 의미로 미사일 혹은 총기 발사라는 의미에 쓰이기도 해서 명확하지 않다.
  의미를 명확하게 '로켓 발사' 라는 변수로 수정하였다.
  2. 매직넘버를 상수로 선언
  - 86400000 -> ONE_DAY_MILLISECONDS
  매직넘버는 왠만하면 사용하지 않도록 한다.
  주석을 달지 않으면 잘 모르는 사람이 보면 의미를 전혀 알 수 없기 때문이다.
  의미를 명확하게 알 수 있도록 'ONE_DAY_MILLISECONDS' 라는 이름을 붙여 주었다.
  또한, 하루의 밀리초는 변하지 않을 것이므로 상수로 선언하였다.

# 무엇을 배워야 하는지
매직넘버를 사용하지 말자!!
매직넘버는 전혀 의미를 알 수 없다. 또한 검색하기도 쉽지 않다.
그리고 수정된다면 다 바꾸어야 하는데 그게 같은 의미인지 포함된 모든 코드를 보아야 한다. 
**/

[2번]

// BAD 더러운 코드 😣
// Hint❕ : 의미있는 이름을 사용해주세요.

const yyyymmdstr = moment().format("YYYY/MM/DD");

// GOOD 😎
// 위 코드를 깨끗하게 다시 작성해 주세요.
const currentDate = moment().format("YYYY/MM/DD");


// 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요.
//yyyymmdstr이라는 변수명은 한번에 그 의미를 받아들이기 힘들기때문에, 이런 코드는 내용 파악이 쉽게끔 변수명을 지어줘야한다.

[3번]

// BAD 더러운 코드 😣
// Hint❕ : 불필요하게 반복하지 마세요.

const Car = {
  carMake: "Honda",
  carModel: "Accord",
  carColor: "Blue"
};

function paintCar(car, color) {
  car.carColor = color;
}

// GOOD 😎
// 위 코드를 깨끗하게 다시 작성해 주세요.
const Car = {
  make: "Honda",
  model: "Accord",
  color: "Blue"
};

function paintCar(car, color) {
  car.carColor = color;
}


// 어떻게 고쳤는지, 사례에서 무엇을 배워야 하는지 설명해주세요.
// 이미 Car 객체에 속하는 변수들이기 때문에 굳이 변수명을 car...으로 표현할 필요가 없다.
// 불필요한 맥락을 추가하지 말자!
profile
정리하고 다듬기 위한 공간

0개의 댓글