프로그래밍/DesinPattern
[CreationalPatterns] Telescoping Constructor Pattern - 점층적 생성자 패턴
Changun An
2023. 4. 13. 23:38
반응형
| OutLine. 점층적 생성자 패턴 (Telescoping Constructor Pattern)
│─ 특징
│─ 장점
│─ 단점
│─ 코드 With.C++
│─ Result(후기)
└─ Github
특징
- 매개변수를 가지는 생성자를 다양하게 미리 만들어 두는 것.
- 생성자를 특정하여 명백하게 배치 생성 가능.
- 구현해두는 것에 따라 필수 매개변수, 선택 매개변수 구분.
장점
- 구현이 간편함
- 가독성이 높음
- 각 생성자가 파라미터 종류와 개수를 명확하게 표현
단점
- 코드가 복잡해짐 (생성자가 많아짐)
- 유지보수성 저하
- 파라미터 순서 잘못 기입으로 인한 버그 발생
- 매개변수의 타입이 같은 경우 생성자 불가
코드 - With. C++
Robot.hpp
#pragma once
#include <iostream>
class Robot {
private:
std::string m_model_name; // Essential
float m_max_vel; //Essential
float m_max_angle; //Essential
float m_min_vel; // Select
float m_min_angle; // Select
public:
Robot(std::string model_name, float max_vel, float max_angle, float min_vel, float min_angle);
Robot(std::string model_name, float max_vel, float max_angle);
Robot(std::string model_name, float max_vel, float max_angle, float min_vel);
virtual ~Robot();
void fn_print_all();
};
Robot.cpp
#include "Robot.hpp"
Robot::Robot(std::string model_name, float max_vel, float max_angle, float min_vel, float min_angle) : m_model_name(model_name), m_max_vel(max_vel), m_max_angle(max_angle), m_min_vel(min_vel), m_min_angle(min_angle) {
}
Robot::Robot(std::string model_name, float max_vel, float max_angle) : Robot(model_name,max_vel,max_angle,(float)0.0,(float)0.0) {
}
Robot::Robot(std::string model_name, float max_vel, float max_angle, float min_vel ) : Robot(model_name, max_vel, max_angle,min_vel,(float)0.0) {
}
Robot::~Robot() {
}
void Robot::fn_print_all() {
std::cout << "model_name : " << m_model_name << " max_vel : " << m_max_vel << " max_angle : " << m_max_angle << " min_vel : "<<m_min_vel<< " min_angle : " << m_min_angle<<std::endl;
}
main.cpp
#include "Robot.hpp"
int main() {
Robot turtlebot("turtlebot", 30, 20, 10, 50);
turtlebot.fn_print_all();
Robot wavembot("wavembot", 80, 50, 10);
wavembot.fn_print_all();
Robot changunbot("changunbot", 50, 20);
changunbot.fn_print_all();
return 0;
}
Result
코드를 보면 생성자를 다양하게 미리 만들어두고 사용하는 방식이다보니 구현 자체는 간편하다는 장점이 있으나
코드가 길어지고 가독성이 떨어지며 생성 시 매개변수가 의미하는 바를 전부 외우고 있지 않으면 찾아봐야 한다.
GitHub
https://github.com/Anchangun/cpp_study/tree/main/DesinPattern/ConstructorPattern
GitHub - Anchangun/cpp_study: Modern c++ 14 Target Sutdy repository
Modern c++ 14 Target Sutdy repository. Contribute to Anchangun/cpp_study development by creating an account on GitHub.
github.com
반응형