2장: 리팩터링 깊게 들여다보기
가독성 및 유지보수성 향상
리팩터링
- 더 나은 코드를 만드는것
- 코드가 하는 일은 변경하지 않는것
코드 개선
- 가독성 : 의도를 전달하기 위한 코드의 성질
- 유지보수성 : 코드를 변경하기 쉽게 만드는 성질
- 함께 변하는건 함께 있어야 된다(localizing ivariants)
- 취약성의 근원은 전역 상태(global state)이다
- 불변속성(invariants) : 코드에서 상태(조선)를 명시적으로 확인하지 않는 속성(assertion 으로만 확인)
코드가 하는 일을 바꾸지 않고 유지보수하기
코드는 블랙박스로 생각하고 외부에 영향을 주지 않는 내부의 모든 작업을 변경할수 있다고 생각
리팩터링을 할 때는 블랙박스의 경계를 고려해야 함
리팩터링의 세가지 핵심
- 의도를 전달함으로써 가독성 향상
- 불변속성의 범위제한을 통한 유지보수성 향상
- 범위 밖의 코드에 영향을 주지 않고 1항과 2항을 수정
속도, 유연성 및 안정성 확보
리팩터링 패턴에는 구체적이고 지역적인것(변수명 변경) 부터 추상적이고 전역적인 것에 이르기 까지 여러 수준이 있다.
상속보다는 컴포지션 사용
유연성 : 컴포지션을 중심으로 만들어진 시스템을 사용하면 다른 방식보다 더 깔끔하게 코드를 결합하고 재사용 할 수 있다
수정이 아니라 추가로 코드를 변경
컴포지션의 가장 큰 장점은 추가(addition)로 변경 가능 하다는 것
개방 폐쇠 원칙- 확장엔 열려있어야 하고 수정엔 닫혀 있어야 한다는 의미
- 프로그래밍 속도
- 어떤 코드가 사용되고 어떤 코드가 사용되지 않는지 주의를 기울이고 사용하지 않는 코드는 최대한 빨리 삭제
- 안정성
- 추가에 의한 변경 방식을 따르면 기존코드를 항상 보존할 수 있다
리팩터링과 일상 업무
기슬부채
- 레거시 시스템을 변경하기 전에 먼저 리팩터링 하자
- 코드를 변경한 후에도 리팩터링 하자
학습 방법으로서의 리팩터링
리팩터링은 코드를 연구하는 완전히 다른 방법
소프트웨어 분야에서 ‘도메인’ 정의하기
실제 세계의 구성요소를 소프트웨어의 도메인 이라고 한다
프로그래밍은 주로 학습과 의사소통에 관한것