Post

리팩토링이란?

1. 리팩토링이란?

리팩토링(refactoring)은 코드 동작을 바꾸지 않고 코드를 변경하는 것

1.1 코드 동작이 변하지 않는다는 것을 어떻게 보장할 수 있을까?

리팩토링을 할 때, 일반적으로 다음 내용을 다룬다.

  • 구현 세부 사항
  • 불특정하고 검증되지 않은 동작
  • 성능

윌리엄 옵다이크 -> 코드 변경과 안정을 보장하는 자동화 도구 사용

마틴 파울러 -> 자동화보다는 안전하지 않은 상태를 최소화

1.2 구현 세부 사항에 관심을 두면 어떨까?

1
2
3
function byTwo(number) {
	return number * 2;
}
1
2
3
function byTwo(number) {
	return number << 1;
}

구현 세부 사항: * 또는 « 사용한 것

1000000000000 « 1을 수행하면 에러 발생

결과값이 잘못되었다고 여김 -> 테스트케이스가 생각보다 더 많은 경우를 포함해야 함

세부 사항 테스트는 대부분 불필요할 뿐만 아니라, 리팩토링할 수 없는 코드 기반을 만들기도 함

1.3 불특정하고 검증되지 않은 동작에 관심을 두면 어떨까?

자동이나 수동에 상관없이 테스트를 거치지 않은 코드들은 리팩토링할 수 없음

1.4 성능에 관심을 두면 어떨까?

리팩토링에 초점을 두기보다는 프로그램의 정확성처럼 성능 특성(비기능적 측면)으로 검증하는 것 -> 성능용 테스트

결국 성능을 고려하는 것은 기대치와 테스트를 결정하기 전까지는 부차적인 문제

1.5 동작이 변하지 않는다면 리팩토링의 요점은?

요점은 행동을 유지하면서 품질을 향상하는 것 버그를 수정하거나 새로운 기능을 작성하는 것은 동작 변화와 관련되므로 리팩토링의 영역이 아님

1.6 품질 균형 잡기와 일 끝마치기

기술적 부채 속에서 달성되는 품질 범위는 어느 정도 정확

그러나 소규모 프로젝트에서 가시적이고 설명 가능한 기술적 부채는 어느 정도 허용될 수 있지만, 큰 프로젝트에서는 품질을 중요하게 여기며 진행해야 함

1.7 품질이란 무엇이며 리팩토링과 어떤 관련이 있을까?

코드 품질을 좋게 하려는 노력은 있었지만, 품질 기준은 없다.

이 책의 목적은 제대로 작동하고 쉽게 확장될 수 있는 코드를 만드는 것

주요 관심사는 코드 테스트를 작성하고 쉽게 테스트할 수 있는 코드를 작성하는 것

  • 인터페이스를 단순화하려고 함수와 모듈 추출
  • 테스트를 이용하여 코드의 동작 확인
  • 가능하면 불순한 기능 피하기
  • 변수 및 함수의 이름을 잘 짓기

리팩토링 맥락에서 품질은 목표 따라서 품질을 향상시키려고 리팩토링을 사용하여 코드를 안전하게 변경

품질에서 인간의 가독성

인간의 가독성은 품질을 논할 때 주요 관심사로 인용되지만, 다루기 어려운 척도

1.8 탐험으로서 리팩토링

리팩토링은 일반적으로 코딩에 자신감을 갖게 하고 작업 중인 내용을 잘 이해하는 데 도움을 줌 꼭 필요하다면 리팩토링하세요

-> 하지만 항상 쉽고 재미있는 탐험의 길은 아닙니다.

1.9 어떤 것이 리팩토링이고 어떤 것이 아닐까?

리팩토링이 아닌 것들은 새로운 코드와 기능을 만든다.

테스트를 거치지 않은 코드 변경은 동작을 보장할 수 없으므로 리팩토링이 아니라 단지 코드만 변경하는 것

1.10 마무리

프레임워크는 코드를 간소화하고 규격화하는 데 도움을 주지만, 품질에 대한 사항에서 답이 될 수 없다.

리팩토링을 통해 품질 저하를 반복하지 않고 개선하는 절차를 배운다.

참고자료

리팩토링 자바스크립트(Refactoring JavaScript)

This post is licensed under CC BY 4.0 by the author.