반응형
"임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query)"는 메서드 내부에서 임시 변수를 사용하는 대신 해당 계산을 반환하는 메서드를 만드는 리팩터링 기법입니다.
임시 변수를 만든다는 거 자체가 리팩터링이라고 할 수 있습니다.
해당 임수 변수를 통해서 어떤 의도를 가진 로직인지 알 수 있기 때문입니다.
이러한 임시 변수를 만드는 로직 자체를 함수로 만들 수 있습니다.
임시 변수를 만드는 함수는 해당 임시 변수를 사용하는 곳에서 사용하며, 해당 임시 변수를 사용하는 코드 로직을 함수로 추출할 때, 매개 변수 넘겨주는 대신 임시 변수 생성 함수를 호출하는 할 수 있습니다.
예를 들어, 다음과 같은 코드가 있다고 가정해 봅시다.
double calculateTotalPrice(int quantity, double price) {
double basePrice = quantity * price;
if (basePrice > 1000) {
return basePrice * 0.95;
}
else {
return basePrice * 0.98;
}
}
이 코드에서 basePrice는 임시 변수로 사용됩니다.
이 변수는 단순히 quantity * price를 저장하고 있습니다.
이를 "임시 변수를 질의 함수로 바꾸기"를 이용하여 다음과 같이 개선할 수 있습니다.
double calculateTotalPrice(int quantity, double price) {
if (basePrice(quantity, price) > 1000) {
return basePrice(quantity, price) * 0.95;
}
else {
return basePrice(quantity, price) * 0.98;
}
}
double basePrice(int quantity, double price) {
return quantity * price;
}
basePrice 함수는 quantity와 price를 인자로 받아서 quantity * price를 반환합니다.
이 함수를 사용하여 calculateTotalPrice 함수를 개선하면 임시 변수를 사용하지 않아도 됩니다.
또한 basePrice 함수를 다른 함수에서도 사용할 수 있어 코드 중복을 줄일 수 있습니다.
'리팩터링 > 리팩터링 기법' 카테고리의 다른 글
리팩터링. 반복문 쪼개기 (Split Loop) (0) | 2023.02.22 |
---|---|
리팩터링. 조건문 분해하기 (Decompose Conditional) (0) | 2023.02.21 |
리팩터링. 함수를 명령으로 바꾸기 (Replace Function with Command) (0) | 2023.02.20 |
리팩터링. 객체 통째로 넘기기 (Preserve Whole Object) (0) | 2023.02.19 |
리팩터링. 매개변수 객체 만들기 (Introduce Parameter Object) (0) | 2023.02.18 |