리팩터링/리팩터링 기법

리팩터링. 매개변수 객체 만들기 (Introduce Parameter Object)

developer-tj 2023. 2. 18. 12:00
반응형

"매개변수 객체 만들기"는 여러 개의 매개변수를 묶어서 하나의 객체로 만들고, 이를 매개변수로 전달하는 방식으로 긴 매개 변수 목록 문제를 해결하는 기법입니다.

 

예를 들어, 다음과 같은 함수가 있다고 가정해봅시다.

double calculate_total_price(double price, int quantity, double tax_rate, double discount) {
    // 계산 로직
}

이 함수는 네 개의 매개변수를 가지고 있습니다. 이를 "매개변수 객체 만들기" 리팩토링 기법을 사용하여 개선하면 다음과 같이 바꿀 수 있습니다.

 

class Product {
public:
    double price;
    int quantity;
    double tax_rate;
    double discount;
    
    Product(double price, int quantity, double tax_rate, double discount)
        : price(price), quantity(quantity), tax_rate(tax_rate), discount(discount)
    {}
};

double calculate_total_price(Product product) {
    // 계산 로직
}

위의 예시에서, 네 개의 매개변수를 가진 함수를 하나의 객체로 묶어서 함수의 매개변수로 전달했습니다.

이를 통해 함수의 매개변수 개수를 줄이고, 객체의 속성을 직접 참조하여 필요한 값에만 접근할 수 있기 때문에 코드의 가독성과 유지보수성을 높일 수 있습니다.

 

 

이러한 식으로 함수에 인자값으로 넘어가는 매개변수들이 여러 함수에 걸처 같이 넘어간다면

해당 매개변수들을 묶은 자료구조(struct, class)로 만들수 있습니다.

- 해당 매개변수의 관계가 명시적으로 나타낸다

- 매소드에 인자값의 개수를 줄 일 수 있다.

- 해당 자료구조를 클래스로 만들어 관리할 수 있다.