반응형
긴 함수(Long Function)는 함수나 메소드가 너무 길어서 가독성과 유지보수성이 떨어지는 상태를 말합니다.
코드 중복과 마찬가지로, 긴 함수도 코드 품질을 저하시키고, 디버깅이 어렵고 버그가 발생할 가능성이 높아집니다.
긴 함수의 문제는 몇 가지로 구분할 수 있습니다.
- 가독성이 떨어진다: 함수가 길어지면 이해하기 어렵습니다.
따라서, 코드를 읽을 때 집중력을 유지하기가 어렵습니다. - 버그 발생 가능성이 높아진다: 함수가 길면 복잡도가 높아지므로, 버그 발생 가능성이 높아집니다.
- 재사용성이 떨어진다: 코드의 기능이 복잡해지면 코드를 재사용하기가 어려워집니다.
따라서, 긴 함수을 해결하기 위해서는 다음과 같은 방법을 고려할 수 있습니다.
- 함수를 작게 분리: 함수가 한 가지 일만 하도록 작게 분리합니다.
이렇게 분리하면 함수의 가독성이 향상되고, 재사용성도 좋아집니다. - 코드 중복 제거: 코드 중복을 제거합니다.
중복 코드가 많으면 함수의 길이가 길어지기 때문입니다.
중복된 코드를 함수로 추출하여 함수를 재사용하거나, 함수로 대체하는 것입니다. - 매개변수 객체(Parameter Object) 사용: 매개변수 객체(Parameter Object)를 사용해서 함수의 매개변수를 줄입니다.
- 코드를 정리: 긴 함수의 코드를 정리합니다.
함수 내에서 다양한 작업을 수행하다보면 함수의 길이가 길어질 수 있습니다.
이럴 때는 함수 내에서 다른 함수를 호출하거나, 객체를 생성하여 함수의 역할을 분담하는 것이 좋습니다.
하나의 긴 함수를 짧은 "의도"를 가진 함수 여러 개로 추출하는 것이 좋습니다.
긴 함수 일부분에 주석을 남기고 싶다면 해당 주석을 함수 이름으로 만들어서 "의도"를 가진 함수로 만듭니다.
가독성을 높이기 위해 변수나 함수의 이름을 명확하게 해줍니다.
과거에는 함수를 호출할때마다 서브루틴 호출로 인한 오버헤드가 있었지만
현재는 컴파일러가 최적화를 시켜주며 하드웨어 성능이 좋아졌기 때문에 이 정도의 오버헤드는 감수할 수 있습니다.
(크게 성능 저하가 되지 않습니다.) - 일관된 함수 이름: 일관된 함수 이름을 사용합니다.
함수 이름이 일관되면 함수를 찾기 쉬워져서 코드를 읽는 시간이 줄어듭니다.
사용할 수 있는 리팩터링 기술
1. 함수 추출하기
- 함수로 넘겨야 할 인자가 많다면
1. 임시 변수를 질의 함수로 바꾸기
2. 매개변수 객체 만들기
3. 객체 통째로 넘기기
2. 조건문 분해하기
3. 같은 조건으로 여러개의 swtich문이 있다면, 조건문을 다형성으로 바꾸기
4. 반복문 쪼개기
'리팩터링 > 냄새 (리팩터링할 시점)' 카테고리의 다른 글
냄새 6. 가변 데이터 (Mutable Data) (0) | 2023.03.06 |
---|---|
냄새 5. 전역 데이터 (Global Data) (0) | 2023.03.04 |
냄새 4. 긴 매개 변수 목록 (Long Parameter List) (0) | 2023.02.24 |
냄새 2. 중복 코드 (Duplicated Code) (0) | 2023.02.13 |
냄새 1. 기이한 이름 (Mysterious Name) (0) | 2023.02.12 |