Programming/c++ Design Pattern14 [c++ Design Pattern] Template Method Template Pattern (템플릿 메서드) 템플릿 메서드 패턴은 어떤 알고리즘의 구조를 정의하고, 이 알고리즘의 특정 단계를 파생 클래스에서 구현할 수 있도록 하는 패턴입니다. 이렇게 하면은 추상 클래스 (interface 역할) 하는 부분은 수정하지 않아도, 새로운 파생 클래스에서 특정 virtual 함수 부분만 정의하면 문제 없이 프로그램이 동작하게 되는 이점이 있습니당. 우선 예제 코드를 살펴보면은, #include #include #include class Edit { std::string data; public: std::string get_data() { data.clear(); while (1) { char c = _getch(); if (c == 13) break; if (isdigi.. 2023. 11. 29. [C++] OCP Code 예제 아래 코드를 함 보자. #include #include class not_implemented {}; // 예외 전용 클래스 class Shape { int color; public: virtual ~Shape() {} void set_color(int c) { color = c; } void draw() { std::cout 원하는 Shape을 복사하는 기능, color를 변경하는 기능, 면적을 구하는 기능을 제공하고자 하는데 모두 구현하지는 않았다. main 함수에서 while 반복문을 돌면서 cmd 값에 따라서 동작을 수행한다. cmd = 1 -> 새로운 Rect를 vector에 추가 cmd = 2 -> 새로운 Circle을 vector에 추가 cmd = 9 -> Vector에 쌓인 Shape들을 .. 2023. 11. 29. [C++] 추상 클래스 추상 클래스(Abstract class)는 순수 가상 함수가 하나 이상 있는 Class를 말한다. class Shape { public: virtual void draw() = 0; }; class Rect : public Shape { public: void draw() override { } }; int main() { Shape s; // error Shape* p; Rect r; } 위 예시에서 class Shape 같은 경우가 추상 클래스라고 볼 수 있다. 추상클래스는 직접 객체를 생성할 수 없는데, 그 이유는 추상클래스는 구현이 완벽하지 않기 때문이다. 순수 가상함수처럼 -> 구현을 파생 클래스가 할 수 있도록 지시하는 역할을 하지, 그 자체로서 구현이 있지는 않기 때문이다. 추상 클래스는 P.. 2023. 11. 29. [C++] 가상 함수 함수는 함순데 가상함수가 뭐야 ?? Virtual Function ?? #include class Animal { public: void cry1() { std::cout cry2 => Compiler가 cry2 함수를 보니 뭐야?? 얘 virtual 함수네?? 지금 내가 결정할 수 없겠는데? 라고 판단을 하고 Runtime에서 실제 p가 가르키는 객체가 뭔지 판단을 한다. [Compile Time] "?? 얘 Virtual이네 내가 판단할 수 없어" [RunTime] "OK~ p 따라가서 cry2 함수 보니까 virtual이네?? 그럼 얘 객체가 누군지 확인해야겠는데..." "가상함수 테이블 보니까 얘 Dog 객체네 -> Dog로 넘어가서 cry2 함수 실행" 만약 Dog가 cry2 함수를 따로 구현하.. 2023. 11. 28. 이전 1 2 3 4 다음