티스토리 뷰

 

6장. 고칠 건 많고 시간은 없고

6.1. Sprout Method

Sprout 메서드를 만드는 순서

  1. 어느 부분에 코드 변경이 필요한지 식별한다.
  2. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트라면, 관련 작업을 하는 새로운 메서드를 호출하는 코드를 작성한다. 그리고 주석을 표시한다.
  3. 소스 메서드에 어떤 지역 변수들이 필요한지를 결정하고 호출에 필요한 매개변수를 만든다.
  4. Sprout 메서드가 소스 메서드에 값을 반환해야 할지 결정한다. 값을 반환해야 한다면 호출을 변경시켜 반환된 값이 변수에 할당되도록 한다.
  5. 테스트 주도 개발 방법을 사용해 sprout 메서드를 개발한다. 호출이 동작하게 만들기 위해 소스 메서드에 있는 주석문을 제거한다.

6.2. Sprout Class

Sprout 클래스를 만드는 순서

  1. 어느 부분에 코드 변경이 필요한지 식별한다.
  2. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트라면, 그 작업을 하는 클래스를 위한 적당한 이름을 생각한다. 그리고 그 클래스 안에 있는 메서드를 호출한다. 그 메서드는 당신이 해야 할 작업을 수행할 것이다. 그리고 주석을 표시한다.
  3. 소스 메서드에 어떤 지역 변수들이 필요한지 결정하고 클래스의 생성자를 호출하는 데 필요한 매개변수를 만든다.
  4. Sprout 클래스 소스 메서드에 값을 반환해야 할지 결정한다. 값을 반환해서 한다면 호출을 변경시켜 반환된 값이 변수에 할당되도록 한다.
  5. 우선 sprout 클래스를 개발한다. 테스트 주도 개발을 참고하자.
  6. 객체 생성과 호출이 동작하도록 만들기 위해 소스 메서드에 있는 주석문을 지운다.

6.3. Wrap Method

방법 1. 기존의 메서드를 수정하는 방법
방법 2. 새로운 메서드를 생성하는 방법

방법 1 순서

  1. 변경시켜야 할 메서드를 식별한다.
  2. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트들에서 일어난다면 그 메서드를 재명명하고, 옛 메서드와 같은 이름과 서명을 갖는 새 메서드를 만든다. 이 작업을 하는 동안 서명 보전하는 것을 잊지 말자.
  3. 새로운 메서드에 옛 메서드 호출 부분을 위치시킨다.
  4. 새로운 특징을 위한 메서드를 개발하고 한번 테스트한 후에 새 메서드에서 그 메서드를 호출한다.

방법 2 순서

  1. 변경시켜야 할 메서드를 식별한다.
  2. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트에서 일어난다면, 테스트 주도 개발을 사용하는 새 메서드를 개발한다.
  3. 새 메서드와 기존 메서드를 호출하는 또 다른 메서드를 만든다.

6.4. Wrap Class

Wrap 클래스를 만드는 순서

  1. 어느 부분에 코드 변경이 필요한지 식별한다.
  2. 변경이 한 메서드 안의 한 부분에 있는 단일한 일련의 스테이트먼트에서 일어난다면, 생성자 매개변수로 포장하려는 클래스를 받는 클래스를 하나 만든다. 테스트 하니스 안에 있는 소스 클래스를 포장하는 클래스를 생성하는 데 문제가 있다면, 포장된 클래스 상에 구현체 추출이나 인터페이스 추출을 사용해 래퍼를 인스턴스화한다.
  3. 그 클래스 상에 테스트 주도 개발 방법을 사용해 메서드를 하나 생성한다. 이것은 새로운 작업이 될 것이다. 새로운 메서드와 포장된 클래스 상에 있는 옛 메서드를 호출하는 또 다른 메서드를 작성한다.
  4. 새로운 동작이 이뤄지도록 해야 하는 부분에 있는 코드 내의 포장 클래스를 인스턴스화한다.

 

- James Song

댓글