C++ Software-Design Study - 1

2025. 5. 19. 20:30·C++

보통의 객체지향 프로그램을 작성한다고 했을 때 "다형성"의 특징을 이용한다. 

다형성은 쉽게 말해 하나의 타입으로 여러형태의 객체를 다를 수 있는 특징이다.

 

코드로 살펴보면 

앞으로 그림을 그리는 프로그램을 만든다고 해보자 그림을 그리는 프로그램은 필요한 객체들을 모두 그린다는 요구사항이있다. 

현재 필요한 객체는 '사각형' '원'이다. 이러한 요구사항을 가지고 있을 때  객체지향의 다형성을 가지고 어떻게 프로그램을 구현할 수 있을까? 

 

구현방법

1. Shape 인터페이스를 만든다.  인터페이스에서는 Draw 함수가 정의되어있다.

2. 원, 사각형은 Shape의 함수를 구현한다.

3. main 함수에서 각 객체를 그려준다.

 

코드

Shape Class

struct Point
{
	double x;
	double y;
};

class Shape
{
public:
	explicit Shape() = default;
	virtual ~Shape() = default;
	virtual void draw() const = 0;
};

 

Circle Class

class Circle : public Shape {
	
public:
	explicit Circle(double radius):
		radius_{radius}{}

	double radius() const{
		return radius_;
	}
	Point cetner() const{return center_;}

	// Shape을(를) 통해 상속됨
	void draw() const override
	{
		std::cout << "draw circle" << std::endl;
	}
private:
	double radius_;
	Point center_{0,0};

	
};

 

Square Class

class Square :public Shape {
	public:
		// Shape을(를) 통해 상속됨
		void draw() const override{
			std::cout << "square draw" << std::endl;
		}
		explicit Square(double side) :side_{side} {}
		Point center() const { return center_; };
	private:
		double side_;
		Point center_{0,0};
};

 

main

void drawAllShapes(std::vector<std::unique_ptr<Shape>> const& shapes) {
	for (std::unique_ptr<Shape> const& shape : shapes) {
		shape->draw();
	}
}

int main(){
	std::cout << "hello world" << std::endl;
	std::vector<std::unique_ptr<Shape>> shapes;

	shapes.emplace_back(std::make_unique<Circle>(2.3));
	shapes.emplace_back(std::make_unique<Square>(1.2));
	shapes.emplace_back(std::make_unique<Circle>(4.1));
	shapes.emplace_back(std::make_unique<Circle>(4.2));

	drawAllShapes(shapes);
}

 

이것이 우리가 주로 사용하는 다형성을 이용한 프로그램이다.

그런데  코드를 작성하다보니 문득 이런의문이 생긴다. Circle이랑 Square 객체 자기자신을 직접 그리는게 맞을까? Circle, Square는 누군가가 그려주는 객체들이 아닐까? 만약 이런 의문이 들었다면 객체에서 그리는 행위를 분리해보자!

 

"그림을 그리는 프로그램" 에서 핵심은 그림을 그리는것이다. 이 말 뜻은 그림을 그리는것은 언제든지 변화할 수 있다는 말이다.

중요한만큼 변경이 많을테니깐 앞으로 우리는 그리는 행위에 대해서 많이 논의해보자

'C++' 카테고리의 다른 글

C++ Software-Design Study - 2  (0) 2025.05.20
'C++' 카테고리의 다른 글
  • C++ Software-Design Study - 2
교쟁이
교쟁이
  • 교쟁이
    Just Do it!!!
    교쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (29)
      • C++ (2)
        • 자료구조 (0)
        • CMake (0)
        • 기초 (2)
        • 네트워크 (4)
      • 항해99 (15)
        • WIL (4)
      • Back-end (3)
        • DATABASE (3)
      • 글쓰기 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비전공자
    항해99 #nodejs
    sql #database
    테스트
    socket
    항해99
    항해 플러스
    개발자
    동생
    신입개발자
    네카라쿠배
    항해 플러스 # CI/CD #Terraform
    스타트업
    Jest
    파이널 프로젝트
    코드스테이츠
    항해 플러스 #테라폼
    programming
    부트캠프
    자바스크립트
    TCP/IP
    database
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
교쟁이
C++ Software-Design Study - 1
상단으로

티스토리툴바