'리팩토링 워크북'에 해당되는 글 2건

  1. 2008.09.24 [rwb] 연습문제 5. 거대한 클래스
  2. 2008.09.22 [rwb] 측정할 수 있는 냄새, 긴 메서드


A. 이 클래스에는 메서드가 왜 이리 많을까?
   많은 수의 인터페이스를 구현하였고, 많은 멤버변수를 가지고 있다.
☞ 이 클래스는 많은 일을 한다. 일부는 상속받은 것이지만, 이 클래스는 많은 책임을 지고 있다.

B. 열겨된 메서드들을 살펴보고, 이들을 5~10개의 주요 책임 영역으로 분류하라.
     1. 멤버변수의 gettter/setter
     2 . 멤버변수의 값을 변경
     3. 멤버변수의 상태를 판단
     4. 이벤트와 관련된 리스닝 메서드
     5. 다른 객체를 생성하고 리턴하는 메서드
     6. 출력관련 메서드
    7. 스트림 관련 메서드
☞ 컬럼(Columns), 편집(Editing), 렌더링(Rendering), 모델선택(Model Selection), 외관(Appearence), 통지(Notification), 기타(Other)

   '책임 영역으로 분류하라' 메서드를 그냥 종류별로 이름별 특징으로 나열해 버렸군.
   메소드의 하는 일등을 파악해서 구분을 할것, 소스가 너무 길어서 그만... 쩝 다시 한번 읽어보자


C. 라이브러리 작성자는 이들 메서드 중 일부를 어떤 방식으로 제거할 수 있을까?
        이 클래스가 맡고 있는 책임의 일부를 갖는 새로운 클래스를 찾아낼 수 있다면, Extract Class를 이용한다.
        해당 클래스의 새로운 하위 클래스 간의 책임을 구분할 수 있다면 Extract SubClass를 이용한다.
        클라이언트가 사용하는 기능들 중 일부를 따로 묶을 수 있다면 Extract Interface를 이용한다.
☞ 주소를 일반화해서 대칭되는 행과 열 함수를 가질 필요가 없도록 할수 있다.
일부책임을 헬퍼 클래스로 빼낼 수도 있겠다. 메서드 중 일부는 단순히 테이블이나 열 모델을
참고하기만 하는 것도 있을 것이다. 외관 속성은 별도로 관리하거나
더 간단한 인터페이스로 관리할 수 있다.
D. 자바의 Object 클래스에는 11개의 메서드가 있다. 스몰토크(SmallTalk) 프로그래머와 이에 대해
   이야기해보고, 왜 이런 차이가 나타나는지, 그리고 이것이 냄새인지 아니지 알아보라.
☞ 1.스몰토크에서는 동적 유영화(dynamic typing)으로 인해 일반 메서드를 더 쉽게 정의할수 있다.
    2.스몰토크는 오랫동안 존재해 왔고 더 많음 메서드들이 작업에 사용되었다.
    3.스몰토크는 해석된 (그리고 더 열린) 환경으로 인해 더많은 실험이 가능했다
신고
Posted by 영겁회귀
1. 징후
많은 줄   (저자는 5~10줄을 넘어가면 우선 의심한단다)

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

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

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

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

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

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

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

티스토리 툴바