2장: 리팩터링 깊게 들여다보기

2장: 리팩터링 깊게 들여다보기

가독성 및 유지보수성 향상

리팩터링

  • 더 나은 코드를 만드는것
  • 코드가 하는 일은 변경하지 않는것

코드 개선

  • 가독성 : 의도를 전달하기 위한 코드의 성질
  • 유지보수성 : 코드를 변경하기 쉽게 만드는 성질
    • 함께 변하는건 함께 있어야 된다(localizing ivariants)
    • 취약성의 근원은 전역 상태(global state)이다
    • 불변속성(invariants) : 코드에서 상태(조선)를 명시적으로 확인하지 않는 속성(assertion 으로만 확인)

코드가 하는 일을 바꾸지 않고 유지보수하기

코드는 블랙박스로 생각하고 외부에 영향을 주지 않는 내부의 모든 작업을 변경할수 있다고 생각

리팩터링을 할 때는 블랙박스의 경계를 고려해야 함

리팩터링의 세가지 핵심

  • 의도를 전달함으로써 가독성 향상
  • 불변속성의 범위제한을 통한 유지보수성 향상
  • 범위 밖의 코드에 영향을 주지 않고 1항과 2항을 수정

속도, 유연성 및 안정성 확보

리팩터링 패턴에는 구체적이고 지역적인것(변수명 변경) 부터 추상적이고 전역적인 것에 이르기 까지 여러 수준이 있다.

상속보다는 컴포지션 사용

유연성 : 컴포지션을 중심으로 만들어진 시스템을 사용하면 다른 방식보다 더 깔끔하게 코드를 결합하고 재사용 할 수 있다

수정이 아니라 추가로 코드를 변경

컴포지션의 가장 큰 장점은 추가(addition)로 변경 가능 하다는 것

개방 폐쇠 원칙- 확장엔 열려있어야 하고 수정엔 닫혀 있어야 한다는 의미

  • 프로그래밍 속도
    • 어떤 코드가 사용되고 어떤 코드가 사용되지 않는지 주의를 기울이고 사용하지 않는 코드는 최대한 빨리 삭제
  • 안정성
    • 추가에 의한 변경 방식을 따르면 기존코드를 항상 보존할 수 있다

리팩터링과 일상 업무

기슬부채

  • 레거시 시스템을 변경하기 전에 먼저 리팩터링 하자
  • 코드를 변경한 후에도 리팩터링 하자

학습 방법으로서의 리팩터링

리팩터링은 코드를 연구하는 완전히 다른 방법

소프트웨어 분야에서 ‘도메인’ 정의하기

실제 세계의 구성요소를 소프트웨어의 도메인 이라고 한다

프로그래밍은 주로 학습과 의사소통에 관한것

참조