리팩터링/리팩터링 기법
리팩터링 기법. 함수 옮기기(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 클래스는 엔진과 외관을 담당하는 책임을 갖지 않으며, 이에 따라 클래스 변경 빈도가 줄어들게 됩니다.