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;
  }



다음 강으로...

Posted by hoonihoon