'리팩토링'에 해당되는 글 7건

  1. 2008.09.22 [rwb] 거대한 클래스
  2. 2008.09.22 [rwb] 측정할 수 있는 냄새, 긴 메서드
  3. 2008.09.22 [rwb] 연습문제3. 주석
1. 징후
    많은 수의 인스턴스 변수
    많은 수의 메서드
    많은 수의 줄

2. 원인
    거대한 클래스는 조금씩 커진다.
    작성자는 결과적으로 클래스가 너무 커져 버릴때까지 클래스에 기능을 하나씩 추가하는 일을 계속 한다.
    때때로 전체 클래스를 이루는 각 부분에 대한 통찰력 부족이 거대한 클래스를 낳기도 한다.
    어떤 경우이든 이렇게 커진 클래스에는 너무 많은 책임이 한데 포개져 있다.

3. 해야 할 일
    클래스에 긴 메서드가 있다면, 먼저 이 냄새부터 검토하라. 클래스를 나누는 데에는 다음 세가지 접근 방식을
    가장 많이 사용한다.
  1. 클래스가 맡고 있는 책임의 일부를 갖는 새로운 클래스를 찾아낼 수 있다면, Extract Class를 이용한다.
  2. 해당 클래스의 새로운 하위 클래스 간의 책임을 구분할 수 있다Extract SubClass를 이용한다.
  3. 클라이언트가 사용하는 기능들 중 일부를 따로 묶을 수 있다Extract Interface를 이용한다.

    GUI 클래스 중에는 디스플레이 컴포넌트뿐만 아니라, 모델까지 나타내기 때문에 커지는 경우가 종종 있다.
    이런 경우에는 Duplicate Observered Data를 이용하여 도메인 클래스를 뽑아낼수 있다.

4. 효과 
    의사소통을 증진시킨다. 중복을 노출 시킬수 있다.

Posted by 영겁회귀

댓글을 달아 주세요

1. 징후
많은 줄   (저자는 5~10줄을 넘어가면 우선 의심한단다)

2. 원인
프로그래머는 메서드를 작성하기 시작한 후, 적절한 시점에 흐름을 끊거나 헬퍼 클래스를 도입하기 보다는,
하나씩 더 추가하게 된다
.
코딩을 하다 보면 작성하던 코드를 다시 한번 읽는 것보다 계속 작성해 나가는 것이 더 쉽기 때문에
지나치게 큰 블록을 작성
하고 싶은 유혹이 항상 존재.

3. 해야 할 일
ㄱ) Extract Method를 이용해 메서드를 좀더 작은 부분으로 쪼갠다.
흥미로운 블럭을 설명하는 공백이나 주석을 찾아보자. 이때 기계적으로 일곱줄에 한 번씩 함수를 호출하지말고,
의미론적으로 중요한 메서드들을 뽑아내야 한다.

ㄴ)메서드 나누기를 시작하기도 전에 유용한 다른 리팩터링 (일직석으로 길게 나열된 코드 줄, 조건문, 변수 사용법 등을 정리해주는 리팩터링)을 발견할 수도 있다.

4. 효과
의사 소통 증진, 중복을 노출, 흔히 새로운 클래스와 추상화가 느러다도록 한다.

5. 논의
ㄱ) 메서드 호출 빈도가 높아지면 성능이 떨어지는 것이 아니냔 걱정 -> 이는 대부분 사소한 문제로, 이전의 코드를 가능한 깨끗하게 만들면 성능을 획기적으로 증대시키도록 시스템이나 알고리즘을 재구성할수 있는 통찰력을 얻게됨

ㄴ) 매트릭을 눈 감고 적용하지 말자. Extract Method를 사용하는 목적은 그것을 사용하여 통찰력을 증대시키기 위함이다.

6. 금기
어느 정도 긴 메서드가 무언가를 표현하는 가장 좋은 방법일 때도 있다.
(모든 냄새와 마찬가지로, 길이는 문제가 있을지도 모른다는 경고 신호일뿐, 길이가 길다고 반드시 문제가 있는 것은 아님)
Posted by 영겁회귀

댓글을 달아 주세요

Matcher.java

A. Extract Method를 이용해 match()메서드 안에 주석이 필요 없도록 고쳐 보자.
주석을 제거해도 코드의 가독성을 높히고, 재사용성등을 높이기 위해
Extract Method를 수행한다.


B. 코드와 관련된 모든 중요한 것을 코드만으로 전달할수 있을까?
아니면 역시 주석은 나름대로의 가치가 있는 것일까?
특별한 케이스(무슨 이유때문에 코드를 다르게 작성했는지, 무엇을 막기 위해 주석을 그러한 방식으로 작성했는지에 대한)일때
는 주석이 필요하다.
특히 비슷한 모양, 이름의 메소드 클래스에서는 주석이 필요하다. (JAVADOC형식)

코드는 일반적으로 어떻게를 매우 잘 표현 할수 있는 반면, 왜에 대해서는 잘 표현하지 못하는 경우가 있다.
특히, 왜 안되는가에 대해서는 거의 표현이 불가능하다.
코드가 다른 사람들에 공개되면, 그 코드를 보는 사람들 중 일부는 추가 정보를 제공하는 JavaDoc 주석을 포함하는 것이 중요하다는
것을 발견하게 된다.


C. 최근에 작성한 코드를 살펴보자. 코드에 주석이 달려있을 가능성이 높다.
코드가 여러분의 의도를 더 직접적으로 반영하도록 만들어서 주석들 중 일부를 없앨수 있을까?

내용이 긴 블럭을 Extract Method를 실행.
if 분기문안의 내용을 줄여서 상단 주석을 없애도 문맥을 이해하도록 변경한다.

Posted by 영겁회귀

댓글을 달아 주세요