[리팩터링] 6장. 기본적인 리팩터링

유니·2022년 5월 26일
0

리팩터링

목록 보기
2/2

함수 추출하기 ↔ 함수 인라인하기

추출할 때

  • 함수 하나가 한 화면을 넘어가지 않게 하기
  • 재사용성이 높은 경우
  • 목적과 구현을 분리하는 목적
    코드를 보고 무슨일을 하는지 파악하기 어렵다면 함수로 추출하라. 이름을 잘 지어야한다.
  • 들어갈 코드가 짧아도 목적성을 강조할 수 있다면 추출하라
    현재는 함수호출에 걸리는 시간이 매우 짧고, 함수가 짧으면 캐싱이 쉽기 때문에 컴파일러가 최적화하는 데 유리할 수 있다.

인라인할 때

  • 함수 본문이 이름만큼 명확할 때
  • 간접 호출을 과하게 쓰는것을 방지

변수 추출하기 ↔ 변수 인라인하기

추출할 때

  • 표현식이 너무 복잡할 때
  • 디버깅에 도움
    디버거에 중단점을 지정하거나 지역변수에 저장한 상태값을 출력하게 할 수 있음
  • 특정 함수 안에서만 의미가 있다면 변수로 추출
    함수를 벗어난 넓은 문맥에서 의미가 있다면 함수로 추출하자.

인라인할 때

  • 표현식이 이름만큼 명확할 때
  • 변수가 주변코드를 리팩터링하는데 방해되는 경우

함수 선언 바꾸기

  • 함수 이름을 명확하게 변경
  • 매개변수 적절하게 추가/제거하기

변수 캡슐화하기

  • 접근 범위가 넓은 가변 데이터를 변경 및 사용할 때에는 getter / setter 사용
  • 필드를 private으로 유지하기 위함
  • 게터가 데이터의 복제본을 반환하도록 처리하면 원본에 영향을 주지않음
    Object.assign({}, data)

변수 이름 바꾸기

  • 변수 이름을 명확하게 변경

매개변수 객체 만들기

  • 자주 함께 몰려다니는 매개변수들은 하나의 객체로 모으기
  • 매개변수의 수가 줄어들고 데이터 사이의 관계가 명확해짐
  • 데이터 구조를 활용하는 형태로 프로그램 동작을 재구성하여 코드를 근본적으로 바꿔줌

여러 함수를 클래스로 묶기

  • 공통 데이터를 중심으로 긴밀하게 엮여 작동하는 함수들의 경우 클래스 하나로 묶는것이 좋음.
  • 중첩함수 형태로 묶는 것 보다는 클래스로 묶는 것이 테스트에 용이하고 원본 데이터가 코드 안에서 갱신될 때 일관성을 유지하기 좋음

여러 함수를 변환 함수로 묶기

  • 도출로직을 한데 모아 일관된 장소에서 처리할 수 있음
  • 도출 로직이 중복되는것을 피할 수 있음

단계 쪼개기

  • 서로 다른 두 대상을 한꺼번에 다루는 코드를 발견한다면 별개의 모듈로 나눔
  • 모듈이 잘 분리되어있으면 다른 모듈의 상세내용을 몰라도 모듈 단위로 수정을 마칠 수 있음
    -> 각 단계에서 자신만의 문제에 집중하는 컴파일러의 동작 방식(토큰화 - 파싱 - 최적화 - 코드생성)과 유사
profile
추진력을 얻는 중

0개의 댓글