리팩터링/리팩터링 기법

리팩터링 기법. 여러 함수를 변환 함수로 묶기(Combine Functions into Transform)

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

여러 함수를 변환 함수로 묶기(Combine Functions into Transform)는 여러 함수를 하나의 변환 함수로 합치는 리팩터링 기법입니다.
변환 함수란 입력 값을 받아서 그 값을 가공하여 반환하는 함수를 말합니다.
이 리팩터링 기법은 데이터를 변경하는 대신, 데이터를 변환하여 사용하기 때문에 가변 데이터 문제를 해결할 수 있습니다.

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

이 리팩터링 기법은 다음과 같은 상황에서 유용합니다.

  • 여러 개의 함수가 비슷한 방식으로 데이터를 변환하는 경우
  • 여러 개의 함수가 같은 데이터를 사용하는 경우
  • 여러 개의 함수를 호출하여 연속적으로 데이터를 변환하는 경우

 

여러 개의 함수를 하나의 함수로 통합하면, 함수가 불필요하게 많이 생성되는 것을 방지하고,
변환 로직을 한 곳에서 관리하면 코드의 일관성을 유지하면서 중복을 제거할 수 있기 때문입니다.
또한, 함수를 호출하는 횟수를 줄여서 성능도 개선할 수 있습니다.

 

예를 들어, 다음과 같은 두 개의 함수가 있다고 가정해보겠습니다.


int calculateArea(int width, int height) {
    return width * height;
}

int calculatePerimeter(int width, int height) {
    return 2 * (width + height);
}

이 두 함수는 모두 width와 height라는 두 개의 인자를 받아서 연산을 수행합니다.
따라서, 이 두 함수를 하나의 함수로 통합할 수 있습니다.


struct Rectangle {
    int width;
    int height;

    int area() const {
        return width * height;
    }

    int perimeter() const {
        return 2 * (width + height);
    }
};

이렇게 하나의 구조체 안에 멤버 함수로 두 함수를 정의하면, 코드가 더 간결해지고 가독성도 높아집니다.
또한, width와 height라는 두 인자를 전달할 필요 없이, 객체의 멤버 변수를 직접 참조할 수 있기 때문에 코드의 중복도 줄일 수 있습니다.

이처럼 여러 개의 함수를 하나의 함수로 통합하면, 코드 중복을 줄이고 가독성과 성능을 높일 수 있습니다.
하지만, 이때 주의할 점은 하나의 함수가 너무 많은 일을 하지 않도록 구현해야 합니다.
함수의 기능이 너무 많으면 코드가 복잡해지고, 가독성이 떨어질 수 있습니다.
따라서, 하나의 함수가 하나의 목적을 갖도록 구현하는 것이 좋습니다.


여러 함수를 변환 함수로 묶기와 여러 함수를 클래스로 묶기 차이점

여러 함수를 변환 함수로 묶기는 여러 개의 함수를 하나의 함수로 합치는 방법 중 하나입니다.
이 방법은 여러 개의 함수를 순차적으로 호출하는 과정에서 발생할 수 있는 임시 변수의 생성과 같은 문제를 해결해주는 효과가 있습니다.
예를 들어, 주어진 리스트에서 특정 값을 추출하고, 그 값을 가공하여 반환하는 두 개의 함수가 있다면, 이 두 개의 함수를 하나의 함수로 합치는 방법입니다.

반면에, 여러 함수를 클래스로 묶기는 비슷한 기능을 하는 여러 함수를 하나의 클래스 안으로 넣는 방법입니다.
이 방법은 관련된 여러 함수를 하나의 클래스로 묶어서 코드의 가독성을 높이고, 코드의 구조를 명확하게 표현할 수 있도록 도와줍니다.
또한, 이 방법을 사용하면 함수들이 공유하는 상태를 클래스의 멤버 변수로 저장할 수 있어서 가변 데이터 문제를 해결할 수 있는 효과가 있습니다.