[TIL]2023-02-22

민석·2023년 2월 22일
0

TIL

목록 보기
81/87

Fact (사실)

  • 파이브 라인스 오브 코드 3장 읽기

Feeling (느낌)

파이브 라인스 오브 코드 3장 읽기

3장에선 예제 코드를 가지고 아래 5가지 방법을 통해 리팩터링을 설명했다.

  1. 다섯 줄 제한으로 지나치게 긴 메서드 식별
  2. 함수 분해를 위한 리팩터링 패턴
  3. 추상화 수준을 맞추기 위한 함수 분해
  4. 좋은 함수 이름의 속성
  5. 너무 많은 일을 하는 함수 분리하기 ex) if else가 길게있는 코드

먼저 다섯 줄을 제한한다고 되어있는데 한 줄을 정하는 기준은 for, while, if 또는 세미콜론으로 종료되는 모든 것들이다.

이 5줄을 맞추기 위해서 먼저 해당 함수에서 어떤 작업을 하는지 살펴본 다음에 그 작업을 기준으로 함수를 분리한다.

다음 추상화 수준이 맞는지 확인을 하는데 책에선 추상화 수준을 정하는 기준이 함수 내에서 객체에 있는 메서드를 호출하거나 객체를 인자로 전달할 수 있지만 둘을 섞어서 사용하면 안 된다고 표현을 했지만 말로 한다면 헷갈린다.

예를 들어 아래의 함수를 본다면 하나는 sum이라는 함수로 추상화를 하여 인자로 전달하여 계산하고 하나는 length 메서드를 호출하는 방식이므로 서로 추상화 수준이 맞지 않다고 표현한 것이다.

function average(arr) {
	return sum(arr) / arr.length
}

추상화 수준을 맞춰준다면 이렇게 할수있다.

function average(arr) {
	return sum(arr) / size(arr)
}

추상화 수준을 맞춰주는 이유는 코드를 직접 조작하는 코드와 함수에 인자로 전달하는 코드가 섞여있다면 가독성이 떨어지는데 이를 동일하게 유지해 주면 코드를 읽기가 수월하기 때문이다.

이러한 과정 속에서 함수명을 지어야 하는데 좋은 이름을 짓기 위해선 함수의 의도를 설명해야 하고, 함수가 하는 모든 것을 담아야 한다고 되어있었는데 늘 생각하는 거지만 이름 짓는 작업은 딱 정답이 없어서 어려운 거 같다..

그 이후에도 분리한 함수에서도 5줄 제한을 맞춰주기 위해 앞의 작업들과 같은 단계를 거치는데 만약 if 문이 있는 경우엔 if 문은 함수의 첫 번째 항목이어야 한다고 한다. 이 말은 즉 함수는 한 가지 일만 해야 하는데 if 문 자체가 한 가지 일이기 때문에 if 문만 존재해야 한다 그 과정에서 else if가 같이 있다면 같이 동작하여 하나의 기능을 수행하는 것이므로 함께 포함해야 한다는 말로 이해했다.

이렇게 3장에서 알려주는 리팩터링 방법들이 끝이났다.

Finding (교훈)

책에서는 예제 코드가 나오는데 이번에는 예제를 직접 쳐보며 따라 해봤다.
눈으로 보면서 넘어갔을 때는 예제가 좀 복잡하면 확실히 이해를 안 하고 넘어가는 경우가 많았던 거 같은데 직접 쳐보니까 치는 도중 코드가 이해가 되고 기억에도 오래 남는 거 같아서 앞으로도 이렇게 쳐보면서 해봐야겠다.

평소에 추상화 레벨을 맞춰라는 피드백을 듣긴 해서 단순히 함수로 나눠서 맞추면 되겠다고 생각하고 작업을 했는데 이번에 추상화 레벨을 나누는 기준을 직접 코드를 조작하는 방식과 함수를 추상화하여 인자로 넘겨주는 방식이 섞여있다면 추상화 레벨을 맞춰야 하는 신호로 볼 수 있구나라는 점을 배워서 기분이 좋았다.

profile
안녕하세요 프론트엔드 개발자 양민석입니다.

0개의 댓글