개발/리팩터링

파이브 라인스 오브 코드 - 리팩터링 리팩터링하기

DinoDev 2023. 6. 11. 23:54
728x90
반응형

높은 품질의 코드는 유지 보수 비용을 줄이고, 오류를 줄이며, 개발자의 만족도를 향상시키고 리팩터링을 통해 높은 품질을 유지 할 수 있습니다.
리팩터링을 하기 위해선 스킬, 문화, 도구가 충분해야 합니다. 스킬은 코드의 문제점을 파악하기 위해 필요하고, 문화는 리팩터링에 대해 권장하는 것이고, 도구는 작업에 대한 안정성을 보장하는 무언가 입니다.

 

리팩터링이란 무엇인가?

리팩터링은 기능을 변경하지 않고 코드를 변경하는 것 입니다.

리팩터링을 해야 하는 이유는 이러합니다.

  • 코드를 더 빠르게 만들기 위해
  • 더 작은 코드를 만들기 위해
  • 코드를 더 일반적이거나 재사용 가능하게 하기 위해
  • 코드의 가독성을 높이고 유지보수를 용이하게 하기 위해

이를 다시 정리하면 좋은 코드란 사람이 읽기 쉽고, 유지보수가 용이하며, 의도한 대로 잘 동작하는 코드를 말합니다.

스킬: 무엇을 리팩터링할 것인가?

보편적으로 코드 스멜은 코드가 나쁜 것을 의미합니다. 우리는 이런 코드 스멜을 리팩터링해서 더 좋은 코드로 만들어야 합니다.

추가로 규칙이 있습니다. 코드를 작성할 때 규칙이 있으면 방향성을 잡게 되어 코드 스멜이 생기지 않도록 합니다.

문화: 리팩터링은 언제 할까?

리팩터링은 정기적으로 여유가 있을 때 마다 수행하는게 비용을 줄이고 효과적으로 진행할 수 있게 합니다.

프로그래밍 작업으로 문제를 해결할 때 탐색 -> 명세화 -> 구현 -> 테스트 -> 리팩터링 -> 전달과 같이 6가지의 단계로 진행합니다.

  • 탐색: 무엇을 만들지 찾는 단계
  • 명세화: 무엇을 만들지 정하는 단계
  • 구현: 코드로 작성
  • 테스트: 명세에 작성한 사양을 따르는지 확인
  • 리팩터링: 코드를 전달하기 전에 다음 사람이 쉽게 작업할 수 있는지 확인
  • 전달: 코드를 다른사람에게 전달, PR을 만들거나 특정 브랜치에 push

규칙 기반의 리팩터링을 수행할 때 작업 절차가 정해져 있기 때문에 규칙에 맞게 리팩터링을 진행하면 됩니다.

레거시 시스템에서 리팩터링할 때는 우선 변경하기 쉽게 만든 후에 변경해야 합니다. 이 것은 새로운 것을 구현할 때마다 새 코드를 쉽게 추가할 수 있어야 한다는 것 입니다.

하지만 리팩터링을 하지 않아도 되는 것이 있는데 1. 한 번 실행하고 삭제될 코드이며 2. 폐기되기 전 유지보수 중인 코드로 fade out이 될 예정인 코드이며 3. 임베디드 시스템이나 게임의 고급 물리엔진처럼 엄격한 성능 요구사항이 있는 코드 입니다. 이런 것들을 제외하고 나머지에 리팩터링 하도록 해야 합니다.

도구: 안전한 리팩터링 방법

버전 관리(Git)과 컴파일러와 IDE는 리팩터링 할 때 아주 중요한 도구가 됩니다.

컴파일러와 정적 타입을 사용하면 개발자의 실수를 줄일 수 있고 문제가 없는 것이 검증 될 때마다 commit을 통해 마지막 검증된 상태로 쉽게 돌아갈 수 있습니다.

IDE를 사용하면 기계적인 리팩터링을 할 수 있기 때문에 이것 또한 개발자의 실수를 줄일 수 있습니다.

 

728x90
반응형