리팩터링/리팩터링 기법

리팩터링. 객체 통째로 넘기기 (Preserve Whole Object)

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

함수에 전달하는 인자값이 특정 클래스에 포함된 멤버 변수들인 경우에 (2개 이상) 인자값으로 해당 클래스를 넘길 수 있습니다.

- 함수에서 넘기는 인자값 개수를 줄 일 수 있다. (향후에 해당 클래스에서 포함된 멤버 변수가 또 필요 할 수도 있다.)

- 해당 리팩터링을 적용하기 전에 의존성을 고려해야한다.

- 해당 함수의 위치가 적절하지 않을 수도 있다. (함수에서 인자값을 넘기는게 아니라 해당 함수가 클래스에 포함되어야 할수 있다.)

 

 

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

void print_student_info(std::string name, int age, std::string address, 
	std::string phone_number, std::string email);

위 함수는 학생의 정보를 출력하는 함수입니다.

그러나 매개변수가 다수이며, 학생 정보를 전달하기 위해서는 모든 매개변수가 필요합니다.

 

이제 StudentInfo 클래스를 만들어 위 함수에서 사용하는 매개변수를 하나의 객체로 묶을 수 있습니다.

class StudentInfo {
public:
    std::string name;
    int age;
    std::string address;
    std::string phone_number;
    std::string email;
};

void print_student_info(const StudentInfo& student_info);

위 코드에서 StudentInfo 클래스는 학생 정보를 저장하는 역할을 합니다. 

print_student_info() 함수에서는 StudentInfo 객체를 매개변수로 전달받아 해당 객체에 저장된 정보를 출력합니다.

// StudentInfo 객체 생성
StudentInfo student_info;
student_info.name = "홍길동";
student_info.age = 25;
student_info.address = "서울시 강남구 역삼동";
student_info.phone_number = "010-1234-5678";
student_info.email = "hong@gmail.com";

// 학생 정보 출력
print_student_info(student_info);

위와 같이 StudentInfo 클래스를 사용하면, 관련된 정보를 하나의 객체로 묶어서 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 

 

또한, StudentInfo 클래스에 필요한 멤버 함수를 추가하여 해당 객체에 대한 기능을 확장할 수 있습니다. 

이를 통해 코드의 재사용성이 높아지며, 유지보수성이 향상될 수 있습니다.