본문 바로가기
개발 방법론/리팩터링 이론

[Refactoring] 함수 추출하기

by VictorMeredith 2023. 5. 1.

1. 함수 추출하기

- 목적과 구현을 분리하는 방식을 기준으로 함수를 추출하는 방법

- 함수의 호출이 많아져 성능이 저하될까 걱정하는 부분에 대해서는 일반지침을 따르자.

- 성능최적화의 일반지침 : "최적화를 할 때는 두 규칙을 따른다. 첫 번째, 하지마라. 두 번째, 아직 하지마라." - M. A. 잭슨

- 이름짓기 : 함수 추출의 가장 핵심적인 부분이다. 목적과 하는 일에 대해서 가장 직관적인 이름을 지어라.

- 함수의 이름은 나를 당장이라도 때릴 수 있는 사람이 내 코드를 유지/보수 해야된다고 생각할 정도로 확실하고 명확하게 짓는다.

 

2. 함수 추출하기의 절차

 1) 함수를 새로 만들고 목적을 잘 드러내는 이름을 붙인다. ('무엇을' 하는지가 드러나야 한다. '어떻게' 가 아니다. 추상화의 영역이다.)

  - 함수의 목적이 더 잘 드러나는 이름이 생각날 경우 바로 빼내서 추출한다.

  - 일단 추출해서 효과가 크지 않다면 다시 원래 상태로 인라인해도 되니까 이 과정에서 얻는 것이 있다면 시간낭비는 아닐 것이다.

 

 2) 추출할 코드를 원본 함수에서 복사해서 새 함수에 붙여넣기 한다.

 

 3) 추출한 코드 중 원본 함수의 지역변수를 참조하거나 추출한 함수의 유효범위를 벗어나느 변수는 없는지 검사하고, 있다면 매개변수를 통해 전달한다.

  - 일반적인 처리 방법은 모두 파라미터로 전달해버리는 것이다. 추출한 함수의 의존성을 낮춰 순수함수가 되도록 하는 것이 좋다.

  - 추출한 코드에서만 사용되는 변수가 바깥에 선언되어있다면 안으로 넣는다.

  - 추출한 코드 안에서 값이 바뀌는 변수 중에서 값으로 전달되는 것들은 주의해서 처리한다. 

  - 추출한 코드에서 값을 수정하는 지역변수가 많을 경우 함수추출을 멈추고 다른 방법을 시도한 이후에 다시 고려해본다.

 

 4) 원본 함수에서 추출한 코드 부분을 새로 만든 함수를 호출하는 문장으로 바꾼다.

 

 5) 컴파일/테스트한다.

 

 6) 다른 코드에 방금 추출한 것과 같거나 비슷한 코드가 있는지 살핀다. 있다면 방금 추출한 새 함수를 호출하도록 바꿀지 검토한다.

 

3. 함수추출 예시

아주 쉬운 로직 (못 읽겠으면 리팩터링보다 문법공부하셈)

 1) 순수함수 간단추출

 

 2) 지역변수 -> 파라미터로 변환하여 추출하기

 

 3) 지역변수의 값을 변경하는 경우

- 이렇게까지 함수를 추출하고나면 메인 로직을 굴리는 printOwing 함수는 4줄로 끝난다. 심지어 주석도 필요 없을 정도로 깔끔하게 정리되었다. 물론 실제 순수함수들이 파일 어딘가에 굴러다니겠지만, 한쪽으로 몰아두면 되고, 우리에게는 JEST가 있다. 순수함수의 단위테스트를 꼼꼼하게 작성해두면 거의 쳐다볼 일도 없을거다.

 

 4) 함수추출하기가 완료된 함수

프로그래밍은 영어실력과 연관이 굉장히 깊다.

함수 추출하기 끝! 

'개발 방법론 > 리팩터링 이론' 카테고리의 다른 글

[Refactoring] 변수 추출하기  (0) 2023.05.03
[Refactoring] 함수 인라인하기  (0) 2023.05.01
[Refactoring] 애자일과 TDD  (0) 2023.04.24

댓글