Refactoring
품질 속성
- 이해 가능성 : 설계를 어느 정도 이해할 수 있는가?
- 변경 가능성 : 기존 기능 변경 시, 사이드 이펙트 없이 쉽게 수정이 가능한가?
- 확장 가능성 : 기능 추가 시, 사이드 이펙트 없이 쉽게 추가가 가능한가?
- 재사용 가능성 : 다른 문제에서 사용이 가능한가?
- 테스트 가능성 : 테스트를 통해 결함을 쉽게 감지할 수 있는가?
- 안정성 : 실행 과정에서 문제점 발생 시 효과적으로 방어할 수 있는가?
고려해볼만한 것
- 매직 넘버 -> 상수
- assert 도입
- 분류 코드 -> 클래스
- 에러 코드 -> exception
- 생성자 -> 팩토리 패턴
- 상속 -> 위임(ex: 컴포넌트 패턴)
- delegate 은폐
- null 객체
복잡도와 협력자
- 간단한 코드 : 복잡도 낮음, 협력자 적음
- 컨트롤러 : 복잡도 낮음, 협력자 많음
- 도메인 : 복잡도 높음, 협력자 적음
- 복잡한 코드 : 복잡도 높음, 협력자 많음 => 컨트롤러와 도메인으로 나누는 대상