자식 클래스 헤더가 부모 클래스 헤더를 포함
main에서는 필요한 구체 클래스 헤더(자식 클래스)만 포함
부모 클래스에서 자식 클래스 헤더를 포함하는 것은 지양 (순환 참조, 결합도 증가)
권장 패턴
// Monster.h (부모)
class Monster { ... };
// Slime.h (자식)
#include "Monster.h"
class Slime : public Monster { ... };
// main.cpp
#include "Slime.h" // Monster.h는 자동 포함됨
여러 클래스(Store, Battle 등)의 활동을 LogManager가 관찰하고 기록
각 클래스마다 public static 변수를 가지고, 이를 LogManager가 관찰하고 기록하려 하였음
한계: 캡슐화 위반, 의도치 않은 수정 가능
class ILogObserver { // 추상화된 인터페이스로
public:
virtual void onEvent(const std::string& event, int value) = 0;
};
class LogManager : public ILogObserver { ... }; // 구체 클래스
class Store {
ILogObserver* logger; // 인터페이스에 의존
public:
Store(ILogObserver* logger) : logger(logger) {}
};
class LogManager {
public:
static LogManager* getInstance() {
if (instance == nullptr)
instance = new LoaManager();
return instance;
}
};
이벤트를 시스템 전체에 발송하고 LogManager가 구독하여 처리
느슨한 결합으로 확장성과 유연성 확보
의존성 주입(DI)을 선택하는 경우
글로벌 접근(싱글톤)을 선택하는 경우
추상화(인터페이스) 사용 기준
구체 클래스만 사용하는 경우
git 자세히 공부
https://rogerdudler.github.io/git-guide/index.ko.html
https://ebbnflow.tistory.com/196
https://learngitbranching.js.org/?locale=ko
완전 이진 트리 구현
C++ 코딩테스트