냄새 3. 긴 함수
- etc/리팩토링
- 2023. 4. 29.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 3. 긴 함수(Long Function)
- 짧은 함수 vs 긴 함수
- 함수가 길수록 더 이해하기 어렵다. vs 짧은 함수는 더 많은 문맥 전환을 필요로 한다.
- 굳이 구현을 파악해야 하는 것이 아니라면 짧은 함수의 모든 것을 따라 갈 필요 없이 이름만으로 의미를 파악하는 것이 좋다. 따라서 '제목을 더 잘 작성한 짧은 함수'를 많이 쓰는 것이 좋다.
- "과거에는" 작은 함수를 사용하는 경우에 더 많은 서브루틴 호출로 인한 오버헤드가 있었다.
- 메모리에 값이 쌓이면서 오버헤드가 있으나, 최근 언어에서는 이런 오버헤드가 발생하지는 않는다.
- 작은 함수에 "좋은 이름"을 사용했다면 해당 함수의 코드를 보지 않고도 이해할 수 있다.
- 어떤 코드에 "주석"을 남기고 싶다면, 주석 대신 함수를 만들고 함수의 이름으로 "의도"를 표현해보자.
- 함수가 길수록 더 이해하기 어렵다. vs 짧은 함수는 더 많은 문맥 전환을 필요로 한다.
- 사용할 수 있는 리팩토링 기술
- 대부분의 경우 "함수 추출하기"로 해결할 수 있다.
- 함수로 분리하면서 해당 함수로 전달해야 할 매개변수가 많아진다면 다음과 같은 리팩토링을 고려해 볼 수 있다.
- 임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query)
- 매개변수 객체 만들기 (Introduce Parameter Object)
- 객체 통째로 넘기기 (Preserve Whole Object)
- "조건문 분해하기"를 사용해 조건문을 분리할 수 있다.
- 같은 조건으로 여러 개의 Switch문이 있다면, "조건문을 다형성으로 바꾸기 (Replace Conditional with Polymorphism)"을 사용할 수 있다.
- 반복문 안에서 여러 작업을 하고 있어서 하나의 메서드로 추출하기 어렵다면, "반복문 쪼개기"를 사용할 수 있다.
긴 함수의 기준은?
긴 함수의 기준은 의미를 잘 나타내느냐로 판단할 수 있다. 예를 들어 한 줄 짜리 코드가 있는데, 이 코드가 '구현 사항'을 서술하는데에만 그친다면 한 줄 짜리 코드라도 '긴 함수'가 될 수 있다. 반면 다섯 줄 짜리 코드가 있는데, 각각의 '의미'를 잘 표현하고 있다면 긴 함수가 아니라 짧은 함수로 볼 수도 있다.
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 8. 매개변수 객체 만들기 (0) | 2023.04.29 |
---|---|
리팩토링 7. 임시 변수를 질의 함수로 바꾸기 (0) | 2023.04.29 |
리팩토링 17. 변수 캡슐화하기 (0) | 2023.04.27 |
리팩토링 : 냄새 5 - 전역 데이터 (0) | 2023.04.27 |
리팩토링6. 메서드 올리기 (0) | 2023.04.27 |