하루의 쉼터

[CreationalPatterns] Telescoping Constructor Pattern - 점층적 생성자 패턴 본문

프로그래밍/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

 

반응형

'프로그래밍 > DesinPattern' 카테고리의 다른 글

[CreationalPatterns] Builder Pattern  (2) 2023.04.15
Comments