본문 바로가기

programming study/Refactoring

Refactoring - 리팩터링 원칙(5)

본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다.

 

리팩터링 원칙

리팩터링의 유래

  • 정확한 유래는 찾을 수 없음
  • 실력있는 프로그래머는 항상 자신의 코드를 정리하는 데 어느 정도의 시간을 할애
  • 깔끔한 코드가 수정하기 쉬움
    • 단, 처음부터 깔끔하게 작성하는 경우는 거의 없음
  • 리팩터링은 소프트웨어 개발 프로세스 전반의 핵심 요소
  • 스몰토크
    • 기능이 풍부한 소프트웨어를 빠르게 작성할 수 있는 굉장히 역동적인 환경
    • 개발 환경 중에서 리팩터링을 활용하기 특히 좋음
    • 컴파일-링크-실행 주기가 상당히 짧음
    • 마지막으로 컴파일한 시점을 안다면 수정 작업을 빠르게 진행 가능
    • 객체 지향 언어의 경우, 인터페이스만 잘 정의해두면 내부 수정이 일부에 미치는 영향을 최소로 줄일 수 있음
    • 그 결과로 XP가 탄생
  • 생산성을 높이는 데에 리팩터링의 역할이 큼
  • 리팩터링은 주류 개발 기법으로 자리잡게 됨

 

리팩터링 자동화

  • 자동 리팩터링을 지원하는 도구 등장
    • 인텔리제이 IDEA
    • 이클립스
    • 자바로 프로그래밍 할 때는 메서드 이름을 바꾸는 작업을 메뉴에서 원하는 항목을 클릭하는 것만으로 처리 가능
    • 테스트가 필요 없을 정도로 안정적
  • 현재는 에디터나 독립 도구에서느 리팩터링 기능을 제공할 정도로 흔해짐
  • 언어마다 리팩터링 자동화할 수 있는 범위가 다름
  • 자동 리팩터링을 제대로 구현하려면 구문 트리로 해석해서 다뤄야 함
    • 단순하게 텍스트 찾아 바꾸기로 구현하는 것은 테스트 이전에 신뢰하면 안 됨
    • 구문트리는 코드의 원래 의미를 보존하는 데 훨씬 유리
    • 단순히 구문 트리를 해석해서 수정하는 것만으로는 리팩터링을 구현할 수 없음
    • 변경된 구문 트리를 다시 에디터 화면에 텍스트로 바꿔 표현해야 함
  • 뛰어난 IDE가 자동 리팩터링도 더 풍부하게 제공
    • IDE는 리팩터링뿐 아니라, 코드 탐색과 린팅을 비롯한 다양한 기능을 구현하는데 구문트리를 활용
  • 정적 타입 언어라면 훨씬 안전하게 구현할 수 있는 리팩터링 수가 늘어남
  • 언어 서버
    • 구문 트리를 구성해서 텍스트 에디터에 API 형태로 제공하는 소프트웨어
    • 언어 서버는 다양한 텍스트 에디터를 지원
    • 정교한 코드 분석, 리팩터링 기능 제공