Five Lines of Code - 3. 긴 코드 조각내기
주제: 다섯 줄 제한으로 메서드 식별하고 분해하기, 추상화 수준 맞추기 및 if 문 분리까지.
🔖 3.1 왜 다섯 줄인가? - 의도
책의 내용
각각 5줄의 코드가 있는 4개의 메서드가 20줄인 하나의 메서드보다 훨씬 빠르고 이해하기 쉽습니다. 각 메서드의 이름으로 코드의 의도를 전달할 수 있기 때문입니다. 기본적으로 메서드의 이름을 지정하는 것은 적어도 5줄마다 주석을 넣는 것과 같습니다. 또한 작은 메서드에 적절하게 이름을 붙이면 큰 함수의 이름을 정하는 데도 도움이 됩니다.
나의 생각
이전에 우아한테크코스 프리코스 미션 중, 요구사항 중 메서드 길이의 제한이 있었던 것으로 기억한다. 그때 당시에는 그냥 메서드 길이가 길면 가독성이 안 좋은가보다 라고 생각했는데, 이 문장을 읽으니 이제 이해가 되었다. 돌이켜보면 잘 읽히는 코드는 친절하고 직관적인 변수명 덕분에 그냥 영어 문장을 읽듯 코드의 기승전결이 딱 보였던 것 같다. 코딩을 하면 할수록 변수 이름 짓기에 꽤 많은 고민과 시간을 투자하는데, 이제는 더 그럴만한 가치가 있다고 믿어도 될 것 같다.
🔖 3.5 너무 많은 일을 하는 함수 분리하기
책의 내용
if 문이 있는 경우, 해당 if 문은 함수의 첫 번째 항목이어야 합니다. 또한 그 후에 아무것도 해서는 안 된다는 의미에서 유일한 것이어야 합니다.
function reportPrimes(n: number) {
for (let i = 2; i < n; i++)
if (isPrime(i))
console.log(`${i} is prime`); // (1) 숫자를 반복하고 (2) 숫자가 소수인지 확인한다.
}
function reportPrimes(n: number) {
for (let i = 2; i < n; i++)
reportIfPrime(i); // (1) 숫자를 반복한다.
}
function reportIfPrime(n: number) {
if (isPrime(i))
console.log(`${i} is prime`); // (2) 숫자가 소수인지 확인한다.
}
이 규칙은 if 문이 하나의 작업이기 때문에, 이를 분리할 때 이어지는 else if는 if 문과 분리할 수 없는 원자 단위로 봅니다. 이것은 if 문이 else if와 함께 문맥을 형성할 때 메서드 추출로 수행할 수 있는 가장 작은 단위가 if 문과 이어지는 else if까지 포함한다는 것을 의미합니다.
나의 생각
위의 예시를 보며 알고리즘 문제를 풀거나 기능 구현을 할 때 내가 얼마나 많은 함수들에게 여러 일을 시켰는지 돌아보게 되었다... 정말 이렇게 쪼개 쓰는게 좋다는 거지..? 굉장히 습관적으로 하나의 함수에 if 문과 for문을 비롯한 여러 역할을 가지게 했는데 앞으로는 의식적으로 쪼개야겠다. (물론 처음부터 쪼개기엔 어려운 부분이 있음)
Last updated