리팩터링/리팩터링 기법

리팩터링 기법. 여러 함수를 클래스로 묶기 (Combine Functions into Class)

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

"Combine Functions into Class" 리팩터링 기법은 "긴 매개 변수 목록" 문제를 해결하는 데 도움이 되는 기법 중 하나입니다.

 

이 기법은 여러 개의 함수를 하나의 클래스로 묶는 것입니다.

이를 통해 관련된 기능을 하나의 단위로 묶어서 더 간결하고 유지보수가 용이한 코드를 작성할 수 있습니다.

 

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

void process_order(std::string customer_name, std::string product_name, int quantity, double price);
void cancel_order(std::string customer_name, std::string product_name);

위 함수들은 주문을 처리하고 취소하는 데 필요한 기능을 수행합니다.

그러나 매개변수가 길고 복잡하며, 유사한 유형의 기능을 처리하는 다른 함수들과 함께 존재한다면 코드의 복잡도가 증가할 수 있습니다.

 

이 때, Order 클래스를 만들어 위 함수들을 하나의 클래스로 묶을 수 있습니다.

class Order {
public:
    void process(std::string customer_name, std::string product_name, int quantity, double price);
    void cancel(std::string customer_name, std::string product_name);
private:
    // 멤버 변수 등
};

위 코드에서 Order 클래스는 process()와 cancel() 함수를 제공합니다. 

 

이제 주문 처리 및 취소와 관련된 모든 기능을 하나의 클래스에 묶어서 사용할 수 있습니다.

// Order 객체 생성
Order order;

// 주문 처리
order.process("홍길동", "MacBook Pro", 2, 3000000.0);

// 주문 취소
order.cancel("홍길동", "MacBook Pro");

위와 같이 Order 클래스를 사용하면, 관련된 기능을 하나의 단위로 묶어서 코드를 간결하게 유지할 수 있습니다. 

또한, Order 클래스의 멤버 변수를 사용하여 상태 정보를 저장하고 필요한 경우 다른 함수에서도 사용할 수 있습니다. 

이렇게 함으로써 코드의 유지보수성이 향상될 수 있습니다.