좋은 설계자 & 좋은관리자 & 좋은개발자/Code Refactoring
[1] 리펙토링이란?
hoonihoon
2014. 6. 24. 16:57
1. 리펙토링이란?
- 소프트웨어를 보다 쉽게 이해할 수 있어야 하고, 동작변화 없이 내부 구조를 변경하는 것.
2. 리펙토링의 목적?
- 프로그램을 빨리 작성 할 수 있도록 도와준다.
- 코드 디자인을 개선해준다.
- Bad code -> Good code
3. Bad code 란?
같은 작업을 위해 더 많은 코드 사용, 중복이 많고 이해하기 어렵다.
유지보수하기에도 어려운 코드.
4. 리펙토링은 언제하는가?
틈틈히 계속, 기능추가할때, 버그수정할때, 코드 검토시에.
5. 리펙토링을 할 수 없을때는?
1) 디자인 실수가 있어 마음대로 리펙토링을 할 수 없을때
2) 현재 설계된 구조가 보안문제, 퍼포먼스 문제등 중요사항으로 리펙토링을 기대할 수 없을 때.
3) 코드가 처음부터 작성 하는게 나을 정도로 엉망인 경우
4) 현재 코드가 작동하지 않을 경우
5) 마감일이 가까울 경우.
6. 리펙토링할 나쁜코드는 왜 발생하는가?
- Copy & paste 에 의해 중복 코드 발생.
- 잘못된 변수명, 함수에서 발생. (일관성이 중요 add,register, put, create )
- 특정 클래스내의 메소드가 동작을 하기 위해 다른 클래스에 있는 정보를 많이 필요로 한경우 ( 메서드를 이동한다.)
- 나쁜주석
- 너무긴 메서드, 파라미터
7. 어떤식으로 리펙토링을 시작해야 되는가?
찾기 쉬운것 부터 한다.
측정할 수 있는 것 (주석, 긴메서드, 거대한 클래스, 긴 매개변수)
메소드가 하는일 설명, 블록이 하는일 설명
// 배열값의 각 요소들이 이에 대응되는 예측 값과 허용범위 내의 차이를 갖는지 체크한다. public boolean compare(int[] expected, int[] actual, int clipLimit, int delta) { // clipLimit보다 큰 값을 잘라낸다. for (int i = 0; i < actual.length; i++) if (actual[i] > clipLimit) actual[i] = clipLimit; // 비교하려는 두 배열값의 길이가 같은지 체크한다. if (actual.length != expected.length) return false; return true; }
다음 강으로...