리팩터링/리팩터링 기법

리팩터링. Use Default Values

developer-tj 2023. 3. 1. 12:00
반응형

Use Default Values는 긴 매개 변수 목록 문제를 해결하는 방법 중 하나로, 객체 생성 시 일부 매개변수에 대해 기본값을 지정하는 방식입니다.

 

객체 생성에 필요한 매개변수 중 일부는 일반적으로 고정값을 가지는 경우가 많습니다.

예를 들어, 생성되는 객체의 색상이나 크기 등은 사용자가 매번 변경하지 않는 경우가 많기 때문입니다.

이 경우, 이러한 매개변수에 대해 미리 기본값을 지정해두고, 객체 생성 시 해당 매개변수의 값을 지정하지 않으면 자동으로 기본값을 사용하도록 합니다.

 

이렇게 Use Default Values 방식을 사용하면 객체 생성 시 필수적으로 매개변수를 모두 전달할 필요가 없어지기 때문에 코드가 간결해지고 가독성이 높아집니다.

또한, 기본값을 사용하도록 미리 설정해두면, 객체 생성 시 매개변수를 생략하더라도 코드가 잘 동작하도록 보장할 수 있습니다.

 

다음은C++ 언어를 사용하여 Use Default Values 방식으로 객체를 생성하는 예시 코드입니다.

 

#include <iostream>
#include <string>

class Product {
public:
    Product(std::string name, float price, int quantity = 1, float tax_rate = 0.1, float discount = 0.0)
        : name_(name), price_(price), quantity_(quantity), tax_rate_(tax_rate), discount_(discount) {}

    float total_price() const {
        return (price_ * quantity_) * (1 + tax_rate_) - discount_;
    }

private:
    std::string name_;
    float price_;
    int quantity_;
    float tax_rate_;
    float discount_;
};

int main() {
    Product product1("T-shirt", 10000);
    Product product2("Shoes", 50000, 2);
    Product product3("Pants", 30000, 1, 0.05, 5000);

    std::cout << product1.total_price() << std::endl;
    std::cout << product2.total_price() << std::endl;
    std::cout << product3.total_price() << std::endl;

    return 0;
}

 

위의 예시에서, Product 클래스는 객체 생성 시 많은 매개변수를 받아 초기화하는 생성자를 가지고 있습니다. 

이에 대해 Use Default Values 방식으로 quantity, tax_rate, discount 매개변수에 대해 기본값을 지정해두었습니다.

total_price() 메소드는 제품 가격, 수량, 세금, 할인 등을 이용하여 총 가격을 계산합니다. 

main() 함수에서는 Product 객체를 생성하고, 총 가격을 출력합니다. 

이렇게 Use Default Values 방식으로 객체 생성에 필요한 매개변수에 대해 기본값을 설정하면, 코드가 간결하고 가독성이 높아집니다. 

또한, 기본값을 사용하도록 미리 설정해두면, 객체 생성 시 매개변수를 생략하더라도 코드가 잘 동작하도록 보장할 수 있습니다.