리팩터링/리팩터링 기법

리팩터링 기법. 함수 옮기기(Move Function)

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

함수 옮기기(Move Function) 리팩터링 기법은 이러한 문제를 해결하기 위해 자주 변경되는 코드를 별도의 함수로 추출하는 기법입니다.

예를 들어, 하나의 클래스에서 두 가지 다른 이유로 자주 변경되는 메서드가 있다면 이 메서드들을 각각 별도의 클래스로 추출합니다.
이렇게 하면 각 클래스는 하나의 책임만을 갖게 되고, 유지 보수와 코드 가독성도 향상됩니다.
또한 이렇게 추출된 클래스들은 독립적으로 변경될 수 있기 때문에, 시스템 전반적인 유연성도 향상됩니다.

예를 들어, 자동차 클래스에서 엔진 관련 메서드와 외관 관련 메서드가 자주 변경되는 경우, 이 두 메서드를 각각 별도의 클래스인 Engine과 Exterior로 추출할 수 있습니다.
이렇게 하면 각 클래스는 엔진과 외관을 각각 담당하게 됩니다.
이렇게 추출된 클래스들은 독립적으로 변경될 수 있기 때문에, 예를 들어 엔진의 변경이 외관에 아무런 영향을 미치지 않습니다.
이렇게 하면 코드의 유지 보수성이 향상되고, 시스템의 유연성도 향상됩니다.

다음은 함수 옮기기를 적용한 예시입니다.


class Engine {
public:
    void start() {}
    void stop() {}
};

class Exterior {
public:
    void paint(const std::string& color) {}
    void clean() {}
};

class Car {
public:
    Car() : engine_(), exterior_() {}

    void startEngine() {
        engine_.start();
    }

    void stopEngine() {
        engine_.stop();
    }

    void paintExterior(const std::string& color) {
        exterior_.paint(color);
    }

    void cleanExterior() {
        exterior_.clean();
    }

private:
    Engine engine_;
    Exterior exterior_;
};

위 예제 코드에서 엔진과 외관을 담당하는 클래스를 각각 Engine과 Exterior로 추출하였습니다.
이렇게 하면 Car 클래스는 엔진과 외관을 담당하는 책임을 갖지 않으며, 이에 따라 클래스 변경 빈도가 줄어들게 됩니다.