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