관리 메뉴

너와 나의 스토리

[리팩토링] Replace Inline Code with Function Call 인라인 코드를 함수 호출로 바꾸기 본문

개발/Refactoring

[리팩토링] Replace Inline Code with Function Call 인라인 코드를 함수 호출로 바꾸기

노는게제일좋아! 2021. 11. 20. 14:03
반응형

배경

  • 함수는 여러 동작을 하나로 묶어준다.
  • 함수의 이름이 코드의 동작 방식보다는 목적을 말해주기 때문에 함수를 활용하면 코드를 이해하기가 쉬워진다. 
  • 함수는 중복을 없애는 데도 효과적이다.
    • 동작을 변경할 때도, 비슷해 보이는 코드들을 일일이 찾아 수정하는 대신 함수 하나만 수정하면 된다.
  • 이미 존재하는 함수와 똑같은 일을 하는 인라인 코드를 발견하면 보통은 해당 코드를 함수 호출로 대체하길 원할 것이다. 
    • 하지만 기존 함수의 코드를 수정하더라도 인라인 코드의 동작이 바뀌지 않을 때만 함수 호출로 대체할 수 있다.
    • 이를 판단하는 데는 함수 이름이 힌트가 된다. 
      • 인라인 코드 대신 함수 이름을 넣었을 때 말이 돼야 한다. 
    • 특히 라이브러리가 제공하는 함수로 대체할 수 있다면 훨씬 좋다. 
  • 예:
    • Before
      • let appliesToMass = false;
        for (const s of states) {
            if (s === "MA") appliesToMass = true;
        }
    • After
      • appliesToMass = states.includes("MA");

 

절차

  1. 인라인 코드를 함수 호출로 대체한다.
  2. 테스트한다.

 

결론

  • 특정 함수와 똑같이 동작하는 인라인 코드가 있는 지 확인한다. 
    • 본인이 직접 만든 함수 뿐만 아니라 사용 중인 프로그래밍 언어의 표준 라이브러리나 플랫폼이 제공하는 API를 잘 파악하라.
    • 사용 중인 언어와 플랫폼이 버전 업될 때 어떤 기능이 새로 생기고 변경되는지를 평소에 잘 챙겨두면 코드를 개선하는데 많은 도움이 된다.
  • 있다면, 해당 코드를 함수를 호출하는 것으로 대체하라.

 

 

* 함수 추출하기와 이번 리팩터링의 차이

  • 인라인 코드를 대체할 함수가 이미 존재하는지 여부.
    • 아직 없어서 새로 만들어야 한다면 함수 추출하기를 적용하고
    • 이미 존재한다면 인라인 코드를 함수 호출로 바꾸기를 적용하면 된다.

 

 

출처:

- [리팩터링 2판]

반응형
Comments