반응형
함수에 전달하는 인자값이 특정 클래스에 포함된 멤버 변수들인 경우에 (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 클래스에 필요한 멤버 함수를 추가하여 해당 객체에 대한 기능을 확장할 수 있습니다.
이를 통해 코드의 재사용성이 높아지며, 유지보수성이 향상될 수 있습니다.
'리팩터링 > 리팩터링 기법' 카테고리의 다른 글
리팩터링. 반복문 쪼개기 (Split Loop) (0) | 2023.02.22 |
---|---|
리팩터링. 조건문 분해하기 (Decompose Conditional) (0) | 2023.02.21 |
리팩터링. 함수를 명령으로 바꾸기 (Replace Function with Command) (0) | 2023.02.20 |
리팩터링. 매개변수 객체 만들기 (Introduce Parameter Object) (0) | 2023.02.18 |
리팩터링 기법. 임시 변수를 질의 함수로 바꾸기 (Replace Temp with Query) (0) | 2023.02.17 |