SlideShare una empresa de Scribd logo
1 de 15
Refactoring 리팩토링 10장    - Add Parameter - Remove Parameter - Separate Query from Modifier 아꿈사http://cafe.naver.com/architect1 TTF	http://www.npteam.net
Add Parameter ■ 메소드를호출할때 더 많은 정보가 필요하면, 정보를 포함한 객체를 파라미터로 추가하라.
Add Parameter ■ 동기   - 리펙토링을 하지 않도록 유도하는 방향으로 접근  - 파라미터가 길어지면,  가독성이 떨어진다.     데이터 덩어리가 증가한다.     인터페이스가 변경된다. ■ 대안 - 정보를 담고 있는 객체를 넘긴다.  - Introduce Parameter Object(339) 대안을 먼저 알고, 파라미터를 추가한다.
Add Parameter ■ 절차 - 01 - 메소드시크너처가수퍼/서브 클래스에 구현되어있는지 살펴 본다.   - 파라미터를 추가한 새로운 메소드를 만든다.    (원래 메소드의 구현을 새로운 메소드로 복사)   - 컴파일, 테스트를 한다.
Add Parameter ■ 절차 - 02 - 원래 메소드에서 새로 만든 메소드를 호출하도록 변경한다.  - 컴파일, 테스트를 한다.   - 원래 메소드를 참조하는 부분을 새로운 메소드를 참조하도록 수정한다.   - 원래 메소드를 제거한다.   - 컴파일, 테스트를 한다.
Remove Parameter ■ 파라미터가 더 이상 사용되지 않으면, 파라미터를 제거하라.
Remove Parameter ■ 동기   - 나중에 사용될지 모른다는 생각으로 불필요한 파라미터를 남겨둔다.   판단을 흐리게 하는 악마(Obfuscatis)   Obfuscates  Obfuscation     (일부러) 애매하게 만들다.   - 파라미터를 제거하는 것은 쉬운 리펙토링이다.   - 다형성을 가진 메소드는파라미터 제거에 주의! 불필요한 파라미터는 꼭 제거한다.
Remove Parameter ■ 절차 - 01 - 메소드시크너처가수퍼/서브 클래스에 구현되어있는지 살펴 본다.  자신 혹은 수퍼 클래스가 파라미터를사용하고 있으면 제거하면 안 된다.   - 파라미터를 제거한 새로운 메소드를 만든다.    (원래 메소드의 구현을 새로운 메소드로 복사)   - 컴파일, 테스트를 한다.
Remove Parameter ■ 절차 - 02 - 원래 메소드에서 새로 만든 메소드를 호출하도록 변경한다.  - 컴파일, 테스트를 한다.   - 원래 메소드를 참조하는 부분을 새로운 메소드를 참조하도록 수정한다.   - 원래 메소드를 제거한다.   - 컴파일, 테스트를 한다.
Separate Query from Modifier ■ 질의와 변경을 분리한다! 값을 리턴하고, 객체의 상태를 변경하는 메소드를    1) 값을 리턴하는메소드   2) 객체의 상태를 변경하는 메소드로 각각 분리하여 작성한다.
Separate Query from Modifier ■ 동기   - 값을 리턴하는메소드는Side Effect가  없어야 한다.  - 값을 리턴하는메소드가Side Effect를 포함하면, 질의와 변경하는 부분을 분리해야 한다.   - Side Effect 설명 일반적으로 최적화를 위해 질의 결과 값을 캐쉬해서 사용한다. 캐쉬된 데이터를 변경하고, 다시 질의한 결과가 여전히 변경되지 않은 값일 경우.
Separate Query from Modifier ■ 절차 - 01 - 원래 메소드와 동일한 값을 리턴하는 질의하는 메소드를 만든다.  - 원래 메소드를 수정해서 질의에 대한 호출 결과를 리턴하도록 한다. - 컴파일, 테스트를 한다.
Separate Query from Modifier ■ 절차 - 02 - 각각의 호출부에 대해서,    1) 원래 메소드를 호출하는 부분을 질의 메소드에 대한 호출로 바꾼다.     2) 질의 메소드를 호출하는 코드 앞에  원래 메소드를호출하는 부분을 추가한다.  - 원래 메소드가void 리턴 타입을 가지도록 하고 리턴 식을 제거한다.
Separate Query from Modifier ■ 요약 - 질의하는 함수와 변경하는 함수를 분리한다.    1) 질의하는 함수를 만들어서 리턴값을 받는다.     2) 변경하는 함수는 void 리턴하도록 만든다.    3) 변경하는 함수를 호출하고, 질의하는 함수를 호출하여 처리한다.
감사합니다.

Más contenido relacionado

Destacado

Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevHeo Seungwook
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400Heo Seungwook
 
프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가Heo Seungwook
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave patternHeo Seungwook
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_patternHeo Seungwook
 

Destacado (6)

Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedev
 
리펙토링 11장 p389_p400
리펙토링 11장 p389_p400리펙토링 11장 p389_p400
리펙토링 11장 p389_p400
 
프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가
 
Master slave pattern
Master slave patternMaster slave pattern
Master slave pattern
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_pattern
 
Mvc pattern
Mvc patternMvc pattern
Mvc pattern
 

리펙토링 10장 p316_p324

  • 1. Refactoring 리팩토링 10장 - Add Parameter - Remove Parameter - Separate Query from Modifier 아꿈사http://cafe.naver.com/architect1 TTF http://www.npteam.net
  • 2. Add Parameter ■ 메소드를호출할때 더 많은 정보가 필요하면, 정보를 포함한 객체를 파라미터로 추가하라.
  • 3. Add Parameter ■ 동기 - 리펙토링을 하지 않도록 유도하는 방향으로 접근 - 파라미터가 길어지면,  가독성이 떨어진다.  데이터 덩어리가 증가한다.  인터페이스가 변경된다. ■ 대안 - 정보를 담고 있는 객체를 넘긴다. - Introduce Parameter Object(339) 대안을 먼저 알고, 파라미터를 추가한다.
  • 4. Add Parameter ■ 절차 - 01 - 메소드시크너처가수퍼/서브 클래스에 구현되어있는지 살펴 본다. - 파라미터를 추가한 새로운 메소드를 만든다. (원래 메소드의 구현을 새로운 메소드로 복사) - 컴파일, 테스트를 한다.
  • 5. Add Parameter ■ 절차 - 02 - 원래 메소드에서 새로 만든 메소드를 호출하도록 변경한다. - 컴파일, 테스트를 한다. - 원래 메소드를 참조하는 부분을 새로운 메소드를 참조하도록 수정한다. - 원래 메소드를 제거한다. - 컴파일, 테스트를 한다.
  • 6. Remove Parameter ■ 파라미터가 더 이상 사용되지 않으면, 파라미터를 제거하라.
  • 7. Remove Parameter ■ 동기 - 나중에 사용될지 모른다는 생각으로 불필요한 파라미터를 남겨둔다.  판단을 흐리게 하는 악마(Obfuscatis)  Obfuscates  Obfuscation  (일부러) 애매하게 만들다. - 파라미터를 제거하는 것은 쉬운 리펙토링이다. - 다형성을 가진 메소드는파라미터 제거에 주의! 불필요한 파라미터는 꼭 제거한다.
  • 8. Remove Parameter ■ 절차 - 01 - 메소드시크너처가수퍼/서브 클래스에 구현되어있는지 살펴 본다.  자신 혹은 수퍼 클래스가 파라미터를사용하고 있으면 제거하면 안 된다. - 파라미터를 제거한 새로운 메소드를 만든다. (원래 메소드의 구현을 새로운 메소드로 복사) - 컴파일, 테스트를 한다.
  • 9. Remove Parameter ■ 절차 - 02 - 원래 메소드에서 새로 만든 메소드를 호출하도록 변경한다. - 컴파일, 테스트를 한다. - 원래 메소드를 참조하는 부분을 새로운 메소드를 참조하도록 수정한다. - 원래 메소드를 제거한다. - 컴파일, 테스트를 한다.
  • 10. Separate Query from Modifier ■ 질의와 변경을 분리한다! 값을 리턴하고, 객체의 상태를 변경하는 메소드를 1) 값을 리턴하는메소드 2) 객체의 상태를 변경하는 메소드로 각각 분리하여 작성한다.
  • 11. Separate Query from Modifier ■ 동기 - 값을 리턴하는메소드는Side Effect가 없어야 한다. - 값을 리턴하는메소드가Side Effect를 포함하면, 질의와 변경하는 부분을 분리해야 한다. - Side Effect 설명 일반적으로 최적화를 위해 질의 결과 값을 캐쉬해서 사용한다. 캐쉬된 데이터를 변경하고, 다시 질의한 결과가 여전히 변경되지 않은 값일 경우.
  • 12. Separate Query from Modifier ■ 절차 - 01 - 원래 메소드와 동일한 값을 리턴하는 질의하는 메소드를 만든다. - 원래 메소드를 수정해서 질의에 대한 호출 결과를 리턴하도록 한다. - 컴파일, 테스트를 한다.
  • 13. Separate Query from Modifier ■ 절차 - 02 - 각각의 호출부에 대해서, 1) 원래 메소드를 호출하는 부분을 질의 메소드에 대한 호출로 바꾼다. 2) 질의 메소드를 호출하는 코드 앞에 원래 메소드를호출하는 부분을 추가한다. - 원래 메소드가void 리턴 타입을 가지도록 하고 리턴 식을 제거한다.
  • 14. Separate Query from Modifier ■ 요약 - 질의하는 함수와 변경하는 함수를 분리한다. 1) 질의하는 함수를 만들어서 리턴값을 받는다. 2) 변경하는 함수는 void 리턴하도록 만든다. 3) 변경하는 함수를 호출하고, 질의하는 함수를 호출하여 처리한다.