개발정리

리팩토링 [북리뷰] 리팩토링이란? 본문

리팩토링

리팩토링 [북리뷰] 리팩토링이란?

성구님 2017. 4. 9. 13:42
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

REFACTORING[북 리뷰]

나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법

리팩토링이란

  • 명사형
    • 소프트웨러를 보다 쉽게 이해할 수 있고 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화없이 내부 구조를 변경하는 것.
    • 기본적으로 조금씩 변경하는 것
  • 동사형
    • 일련의 리팩토링을 적용하여 겉으로 보이는 동작의 변화없이 소프트웨어의 구조를 바꾸다.
  • 코드를 효울적이고 통제적으로 만든다.

리팩토링의 목적

  • 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것.
  • 리팩토링은 겉으로 보이는 소프트웨어의 기능을 변경하지 않아야한다.
  • 두 개의 모자
    • 소프트웨어를 개발하기 위해 리팩토링을 사용할 때, 두 가지 구별된 작업(기능추가, 리팩토링)을 위해 시간을 나눠야 한다.
    • 즉,
      • 리팩토링할 때는 리팩토링만,
      • 새로운 기능을 추가할 때는 개발만

왜 리팩토링을 해야하는가?

  • 리팩토링은 소프트웨어의 디자인을 개선시킨다.
    • 코드는 갈수록 구조가 망가진다.
    • 이런 코드를 정돈하여 구조를 유지시킨다.
  • 리팩토링은 소프트웨어를 더 이해하기 쉽게 만든다.
    • 코드의 이해가 프로그램 개발에 큰 기여를 한다.
    • 누가봐도 이해하기 쉽도록. 가독성 향상
  • 리팩토링은 버그를 찾도록 도와준다.
  • 리팩토링은 프로그램을 빨리 작성하도록 도와준다.
    • 좋은 디자인은 개발 시간을 단축시킨다.

언제 리팩토링을 해야하는가?

  • 삼진규칙
    • 처음에는 그냥 개발한다.
    • 두 번째로 비슷한 어떤 것을 하게되면 중복때문에 주춤하지만 그냥 중복되도록 한다.
    • 세 번째로 비슷한 것을 하게되면 리팩토링한다.
  • 기능을 추가할 때 리팩토링 하라
    • 코드에 대한 이해를 돕기위해
  • 버그를 수정해야할 때 리팩토링 하라
    • 버그가 있다는 만큼 코드가 명확하지 않다는 뜻이다.
  • 코드리뷰할 때 리팩토링 하라
    • 한명의 검토자와 원작자
    • 검토자는 변경을 제안한다.
    • 둘이서 그 변경이 쉽게 리팩토링 될 수 있는지 결정한다.

리팩토링이 작동하는 이유

  • 프로그램은 두 종류의 가치를 가지고 있다.
    • 하나는 오늘 당장을 위한 것이고
    • 다른 하나는 내일을 위한 것이다.
  • 오늘 당장을 위한 프로그래밍은
    • 버그 픽스
    • 기능 추가
    • 기능을 더 많게하여 더 유용하게 만드는 것.
  • 내일 할 일은 충분히 알지 못한다.
  • 프로그램에 대한 작업을 어렵게 하는 요인
    • 읽기 어려운 프로그램은 수정하기 어렵다.
    • 중복된 로직을 가지고있는 프로그램은 수정하기 어렵다.
    • 실행 중인 코드를 변경해야하는 특별한 동작을 요구하는 프로그램은 수정하기 어렵다.
    • 복잡한 조건문이 포함된 프로그램은 수정하기 어렵다.

리팩토링 할 때 문제점

  • 데이터베이스
    • 비지니스 어플리케이션은 데이터베이스 스키마와 밀접하게 결합되어 있다.
    • 객체 모델과 데이터베이스 모델 사이에 별도의 계층을 둔다
    • 복잡성은 증가하지만 융퉁성을 제공한다.
  • 인터페이스 변경
    • 많은 리팩토링이 인터페이스 변경을 요구한다.
    • 하지만 공표된 인터페이스는 변경이 힘들다.
    • 따라서 이전의 인터페이스를 호출하는 새로운 인터페이스를 만든다.
    • 예시 : 자바의 컬렉션

리팩토링의 냄새가 나는 코드

  1. 중복된 코드
  2. 긴 메소드
  3. 거대한 클래스
  4. 긴 파라미터 클래스
  5. 확산적 변경
  6. 산탄총 수술
  7. 기능에 대한 욕심
  8. 데이터 덩어리
  9. 기본타입에 대한 강박관념
  10. switch문
  11. 평행 상속 구조
  12. 게으른 클래스
  13. 추측성 일반화
  14. 임시필드
  15. 메시지 체인
  16. 미들맨
  17. 부적절한 친밀
  18. 다른 인터페이스를 가진 대체 클래스
  19. 불완전한 라이브러리 클래스
  20. 데이터 클래스
  21. 거부된 유산
  22. 주석

문헌

마틴 파울러, 윤성준 조재박 『REFACTORING』, 대청

'리팩토링' 카테고리의 다른 글

리팩토링 객체간의 기능 이동 기법  (0) 2017.04.09
리팩토링 메소드정리 기법  (0) 2017.04.09
Comments