Categories

  • mimi

3장: 긴 코드 조각내기

3.1 첫 번째 규칙: 왜 다섯 줄인가?

3.1.1 규칙: 다섯 줄 제한

각각 5줄의 코드가 있는 4개의 메서드가 20줄인 하나의 메서드보다 훨씬 빠르고 이해하기 쉽다!

3.2 함수 분해를 위한 리팩터링 패턴 소개

코끼리를 먹는 가장 좋은 방법은 한번에 한 입씩 먹는 것이다.

처음 보는 함수를 파악할 때, 함수 전체를 소화하려 하지 말고 작게 잘라서 이해하기 쉽도록 하나씩 처리하자. -> 즉, 내가 쓰던 방법이 맞았다!

3.2.1 리팩터링 패턴: 메서드 추출

한 메서드의 일부를 취해서 자체 메서드로 추출한다.

  1. 각 기능을 우선 분리한다.
  2. 변수가 없어 에러가 나는 부분을 찾는다.
  3. 각 기능에 변수를 전달한다. -> 평소 하던 것과 별반 다르지 않다. 자신의 방법에 의문을 갖지 말자.

메서드의 끝에서 시작해 위로 올라가며 작업하는 것이 좋다.

  • 약간 번거롭지만 안전한 방법을 선택하라.
  • 좀 더 고급스러워 보일 수 있도록 노력하다 겪는 어려움을 두려워하지 말자. 그럴만한 가치가 있다!

3.3 추상화 수준을 맞추기 위한 함수 분해

3.3.1 규칙: 호출 또는 전달, 한 가지만 할 것

함수 내에서는 객체에 있는 메서드를 호출하거나 객체를 인자로 전달할 수는 있지만, 둘을 섞어 사용해서는 안 된다!

전달: 함수에 매개변수로 넣는 것 ex) test(a) 호출: 속성값을 가져오는 것 ex) test.a

-> 동일한 수준의 추상화를 유지하라. -> .의 개수가 같도록, 즉 뎁스가 같도록 유지하라.

3.3.2 규칙 적용

function average(arr){
  return sum(arr)/arr.length;  (x)
  return sum(arr)/size(arr);   (o)
}

이 부분은 솔직히 개인 취향일듯…🤨

솔직히, arr.length 이라고 코드를 읽는 데 크나큰 어려움이 생기는 것은 아니잖아?

3.4 좋은 함수 이름의 속성

좋은 이름이 가져야 할 속성

  • 함수의 의도를 정직하게 설명해야 함
  • 함수가 하는 것을 모두 완전히 담아내야 함
  • 도메인에서 일하는 사람이 이해할 수 있는 단어를 사용해야 함

3.5 너무 많은 일을 하는 함수 분리하기

3.5.1 규칙: if 문은 함수의 시작에만 배치

-> 그리고, 해당 if문은 유일해야 한다…?

function reportPrimes(n){
	for(let i=2; i<n; i++){
    	if(isPrime(i)) console.log(i+"는 소수");  (x..?)
        reportIfPrime(i);						(o..?)
    }
}

function reportIfPrime(n){
  if(isPrime(n)) console.log(i+"는 소수");
}

함수를 어디까지 쪼개야 하는가?

아무리 봐도, o보다는 x쪽이 더 한번에 코드를 파악하기 쉽지 않나?
코드의 양이 늘어나면 늘어날수록 사소하게 쪼개진 함수를 전부 찾아다니기 번거로워지고 한계가 찾아올 것이다.
세네 줄 이내의 짧은 코드들을 하나의 묶음으로 유지하는 것이 그렇게나 나쁜가? 가독성과 빠른 코드 파악 부분에서 오히려 유리하다고 본다.