일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 챗지피티
- gpt-4 무료
- 골린이
- 제주도여행
- 재테크
- 국내여행
- 골프초보
- 챗gpt 업무 활용
- 골프잘치는법
- 골프입문
- 골프
- 골프연습
- 드라이버연습
- 배당주etf추천
- 2025 여행 트렌드
- 국내 핫ㅡㄹ
- 당일치기여행
- 국내 당일치기 숙소
- 아시아나항공
- CAD
- C언어기초
- 남해여행
- 엑셀팁
- c++객체지향
- 골프팁
- 전주한옥마을
- C++
- 2025 제테크 방법
- chatgpt 플러그인 사용법
- 직장인 투자 전략
- Today
- Total
용이네 아지트
C++ 디자인 패턴 기초 객체지향 프로그래밍을 더 효율적으로! 본문
안녕하세요, 개발자 여러분! 😊
지난 포스팅에서 C++ 객체지향 프로그래밍(OOP) 개념을 정리했죠?
그럼 이제 실전에서 객체지향 개념을 어떻게 활용할지 궁금하지 않으신가요? 🤔
그래서 오늘은 C++ 디자인 패턴 기초를 소개할게요!
디자인 패턴(Design Pattern) 은 효율적인 코드 구조를 만들기 위한 "최적의 코드 설계 방법" 입니다.
📌 오늘 배울 내용
✔ 디자인 패턴이란?
✔ 싱글톤 패턴(Singleton) – 인스턴스 하나만 만들기!
✔ 팩토리 패턴(Factory) – 객체 생성을 효율적으로!
✔ 전략 패턴(Strategy) – 유연한 알고리즘 선택!
1️⃣ 디자인 패턴(Design Pattern)이란? 🤔
💡 반복되는 설계 문제를 해결하기 위한 "검증된 코드 구조"
💡 재사용 가능한 코드 구조로 유지보수성을 높여줌
✅ 디자인 패턴은 3가지 유형 으로 나뉩니다!
패턴 유형 설명 대표 패턴
생성 패턴 | 객체 생성 방식을 최적화 | 싱글톤, 팩토리, 빌더 |
구조 패턴 | 객체 간 관계를 효율적으로 설계 | 어댑터, 데코레이터 |
행동 패턴 | 객체의 동작 및 알고리즘 최적화 | 전략, 옵저버, 상태 |
👉 오늘은 가장 많이 쓰이는 생성 패턴 & 행동 패턴 3가지 를 배워볼게요! 🚀
2️⃣ 싱글톤 패턴(Singleton) – 인스턴스 하나만 만들기!
📌 싱글톤 패턴이란?
- 프로그램 전체에서 "하나의 객체" 만 생성되도록 보장하는 패턴
- 리소스를 절약 & 데이터 일관성을 유지 하는데 유용함
📌 싱글톤 패턴 예제 코드
#include <iostream>
using namespace std;
class Singleton {
private:
static Singleton* instance; // 유일한 객체
Singleton() {} // private 생성자 (외부에서 객체 생성 방지)
public:
static Singleton* getInstance() { // 유일한 객체 반환
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void showMessage() {
cout << "싱글톤 객체 사용 중!" << endl;
}
};
// 정적 변수 초기화
Singleton* Singleton::instance = nullptr;
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
s1->showMessage();
// 동일한 인스턴스인지 확인
cout << "주소 비교: " << (s1 == s2) << endl; // 1 (true)
return 0;
}
✅ getInstance()를 통해 하나의 인스턴스만 생성됨!
✅ 게임 엔진, 데이터베이스 연결 등에 자주 사용됨!
3️⃣ 팩토리 패턴(Factory) – 객체 생성을 효율적으로!
📌 팩토리 패턴이란?
- 객체 생성을 담당하는 "팩토리 클래스" 를 따로 만들어 객체 생성 로직을 캡슐화 하는 패턴
- 객체를 직접 생성하는 것이 아니라 "팩토리 메서드"를 통해 생성
📌 팩토리 패턴 예제 코드
#include <iostream>
using namespace std;
// 부모 클래스 (인터페이스)
class Animal {
public:
virtual void speak() = 0; // 순수 가상 함수
};
// 자식 클래스 (Dog)
class Dog : public Animal {
public:
void speak() override { cout << "멍멍!" << endl; }
};
// 자식 클래스 (Cat)
class Cat : public Animal {
public:
void speak() override { cout << "야옹~" << endl; }
};
// 팩토리 클래스
class AnimalFactory {
public:
static Animal* createAnimal(const string& type) {
if (type == "dog") return new Dog();
else if (type == "cat") return new Cat();
return nullptr;
}
};
int main() {
Animal* myPet = AnimalFactory::createAnimal("dog");
myPet->speak(); // 멍멍!
delete myPet; // 메모리 해제
return 0;
}
✅ 팩토리 패턴을 사용하면 객체 생성 로직을 숨길 수 있어 유지보수성이 좋아짐!
✅ 게임 개발, GUI 라이브러리에서 버튼/창 생성 등에 많이 활용됨!
4️⃣ 전략 패턴(Strategy) – 유연한 알고리즘 선택!
📌 전략 패턴이란?
- 여러 개의 알고리즘을 미리 만들어 두고, 상황에 따라 적절한 알고리즘을 선택 하는 패턴
- if-else 대신 유연한 구조로 알고리즘 변경 가능!
📌 전략 패턴 예제 코드
#include <iostream>
using namespace std;
// 전략 인터페이스
class PaymentStrategy {
public:
virtual void pay(int amount) = 0;
};
// 신용카드 결제 클래스
class CreditCardPayment : public PaymentStrategy {
public:
void pay(int amount) override {
cout << "신용카드로 " << amount << "원 결제 완료!" << endl;
}
};
// 페이팔 결제 클래스
class PayPalPayment : public PaymentStrategy {
public:
void pay(int amount) override {
cout << "페이팔로 " << amount << "원 결제 완료!" << endl;
}
};
// 결제 처리 클래스
class ShoppingCart {
private:
PaymentStrategy* strategy;
public:
ShoppingCart(PaymentStrategy* strategy) : strategy(strategy) {}
void checkout(int amount) {
strategy->pay(amount);
}
};
int main() {
CreditCardPayment card;
PayPalPayment paypal;
ShoppingCart cart1(&card);
cart1.checkout(50000); // 신용카드로 50000원 결제 완료!
ShoppingCart cart2(&paypal);
cart2.checkout(30000); // 페이팔로 30000원 결제 완료!
return 0;
}
✅ 전략 패턴을 활용하면 결제 방식을 쉽게 변경 가능!
✅ AI, 게임 개발에서 행동 패턴을 변경할 때 많이 사용됨!
✅ 마무리 – C++ 디자인 패턴 기초 총정리!
✔ 싱글톤 패턴 – 프로그램에서 단 하나의 객체만 생성
✔ 팩토리 패턴 – 객체 생성을 담당하는 팩토리 클래스를 활용
✔ 전략 패턴 – 유연한 알고리즘 변경을 위한 설계
📌 💬 여러분은 어떤 패턴이 가장 유용하다고 생각하나요?
📌 추가로 알고 싶은 디자인 패턴이 있다면 댓글로 남겨주세요! 😊
'IT·자격증' 카테고리의 다른 글
인공지능(AI)과 챗GPT 활용법 – 일과 공부에 바로 쓰는 꿀팁 총정리! (0) | 2025.03.19 |
---|---|
C++ 객체지향 프로그래밍(OOP) 기초 완벽 정리 (0) | 2025.03.14 |
C 언어 & C++ 초보자를 위한 필수 단축키 정리 (1) | 2025.03.10 |
Visual Studio로 C/C++ 설치 및 설정하는 법 (완벽 가이드) (0) | 2025.03.10 |
컴퓨터 CAD 단축키 완벽 정리! (작업 속도 2배 올리기) (0) | 2025.03.10 |