자바로 배우는 리팩토링 입문
by Gongdel
자바로 배우는 리팩토링 입문
리팩토링 정의
리팩토링이란 외부에서 보는 프로그램 동작은
바꾸지 않고 프로그램의 내부 구조를
개전하는 것이다.
- 리팩토링해도 외부에서 보는 프로그램 동작은 변하지 않는다.
- 리팩토링하면 프로그램의 내부 구조가 개선된다.
리팩토링과 유닛 테스트
리팩토링해도 외부에서 보는 프로그램 동작은 변하지 않아야 한다. 이를 확인하기 위해 적어도 유닛 테스트(단일테스트)
를 해야 한다.
리팩토링의 목적
버그 수정과 기능 추가는 리팩토링이 아니다. 리팩토링의 목적은 다음과 같다.
- 버그를 발견하기 쉽게 만든다.
- 버그 수정 자체는 리팩토링이 아니지만, 리팩토링하면 프로그램이 정리되어 숨은 버그를 찾기 쉬워진다.
- 기능을 추가하기 쉽게 만든다.
- 더러운 소스 코드에 계속된 기능 추가는 소스 코드의 오염 속도를 가속시킨다. 이는 기능의 추가를 더욱 어렵게 한다.
리팩토링하면 망가지고 더러운 코드를 다시 정비해서 깨끗하게 만들 수 있기 때문에 기능의 추가가 편해진다.
- 더러운 소스 코드에 계속된 기능 추가는 소스 코드의 오염 속도를 가속시킨다. 이는 기능의 추가를 더욱 어렵게 한다.
- 리뷰하기 쉽게 만든다.
리팩토링과 악취
리팩토링이 필요한 부분을 ‘악취’가 난다고 표현한다. 그렇다면 악취란?
- 이해하기 어려운 부분
- 수정하기 어려운 부분
- 확장하기 어려운 부분
소스 코드를 보다가 이 말이 입에서 튀어나오면 ‘리팩토링이 필요하겠구나’라고 생각하면 된다?
- 겹치잖아!
- 메서드 추출
- 클래스 추출
- 널 객체 도입
- null 확인이 이곳저곳에 존재한다면
- 에러코드를 예외로 치환
- 에러 확인이 많다
- 너무 길어!
- 메서드 추출
- 클래스 추출
- 너무 많아!
- 중개자 제거
- 클래스 인라인화
- 메서드 인라인화
- 이름이 안 맞잖아!
- 너무 공개적이잖아!
- 객체 지향답지 않아!
- 분류 코드(switch, if, intanceof)를 클래스로 치환이나 분류 코드를 하위 클래스로 치환
Subscribe via RSS