컴퓨터/이론 및 tools 사용

[리팩토링 refactoring] Composing methods 메소드 구성 - Remove assignments to parameters 매개 변수에 대한 할당 제거

review777777 2017. 1. 23. 02:32
반응형

Remove assignments to parameters 매개변수에 대한 할당 제거

 

Problem

어떤 값이 메소드 몸체 안에 파라미터 값으로 할당되어졌을 때 - JAVA


int discount(int inputVal, int quantity) {

if (inputVal > 50) {

inputVal -= 2;

}

//...

}

 

Solution

int discount(int inputVal, int quantity) {

int result = inputVal;

if (inputVal > 50) {

result -= 2;

}

//...

}

대신 임시 변수를 사용한다.

이 리팩토링은 로컬변수를 다루는게 아니라 파라미터를 다루고 있다.

만약 파라미터가 매개변수 참조를 통해 전달되는 경우, 파라미터 값이 이 메소드 안에 변경된 후, 이 값은 메서드 호출 요청 인수로 전달된다.

만약 파라미터 값들이 일반적으로 프로그래밍 언어 값으로 전달(참조가 아닌) 경우에도 이 코딩 특질은 이것에 익숙하지 않는 사람들을 혼란스럽게 한다.

 임시 변수 분할과 동일하지만이 경우에는 로컬 변수가 아닌 매개 변수를 처리한다.
먼저 매개 변수가 참조를 통해 전달 된 경우 메서드 내에서 매개 변수 값이 변경된 후이 값은이 메서드 호출을 요청한 인수로 전달된다. 종종 이것은 우발적으로 발생하여 불행한 결과를 초래한다. 매개 변수가 프로그래밍 언어에서 값으로 (참조가 아닌) 전달되는 경우에도이 코딩 단점은 익숙하지 않은 사용자를 소외시킬 수 있다.

둘째, 단일 매개 변수에 여러 값을 여러 번 지정하면 특정 시점의 매개 변수에 어떤 데이터가 포함되어야하는지 알 수 없다. 매개 변수와 그 내용이 문서화되어 있지만 실제 값이 메소드 내부에서 예상되는 것과 다를 수 있다면 문제는 더욱 악화된다.

 

절차

파라미터를 위한 임시변수를 만든다.

파라미터에 값을 대입한 코드 이후에서 파라미터에 대한 참조를 임수변수로 바꾼다.

파라미터에 대입하는 값을 임시변수에 대입하도록 바꾼다.

컴파일 및 테스트


How to Refactor

1. 지역 변수를 만들고 매개 변수의 초기 값을 지정
2.이 줄에 나오는 모든 메소드 코드에서 매개 변수를 새 로컬 변수로 바꾼다.


 

Benefits

분리된 방법으로 반복적인 코드를 추출하는 데 도움이 된다.

프로그램의 각 요소는 단 한 가지에 대한 책임을 져야한다. 이것은 어떤 부작용 없이 안전하게 코드를 대체할 때 코드를 유지보수하기 훨씬 쉽게 만든다.

 

 



반응형