본문 바로가기

Game Programming/C++

패턴 - 9. 빌더 패턴(Builder Pattern) 9. 빌더 패턴(Builder Pattern) - 복잡한 객체의 생성을 표현으로부터 분리시키는 것이다. → 그냥 일정한 양식의 데이터 값을 사용하는 함수?가 있을 경우 해당 값들을 양식에 맞게 사용한다 하지만 중간중간에 데이터가 없는 경우도 발생할 것이다. 그럴 경우 Null로 표기나 0으로 표기하던가 아니면 양식을 또하나 만들어야되는 상황이 발생한다. 예) - 위 PersonInfo()에 정보를 담을려면 제약사항이 있다 매개변수가 없을 경우와 매개변수의 순서가 다를 경우 입력에 오류가 따른다. public PersonInfo build(){ PersonInfo personInfo = new PersonInfo(name, age, favoriteColor, favoriteAnimal, favoriteNu.. 더보기
패턴 - 8. 추상 팩토리 패턴(Abstract Factory Pattern) 8. 추상 팩토리 패턴(Abstract Factory Pattern) - 많은 수의 연관된 서브 클래스를 특정 그룹으로 묶어 한번에 교체할 수 있도록 만든 디자인 패턴 예) 공장별로 팩토리(MachineFactoryA, MachineFactoryB)를 만들고 해당 팩토리를 자신에게 알맞는 멤버 클래스들을 생성8.1 설명 8.1.1 MachineA, MachinB - MachineA와 MachineB의 Interface를 만든 후 그것을 상속받은 하위 클래스에서 구현을 하도록 하지만 동작이 Machine의 Process()로 동일하므로해당 클래스 MachineA와 B를 갖고 있는 MachineFactory라는 Super Interface를 만든다. - 사용 시에는 Super Interface를 상속받은 M.. 더보기
패턴 - 7. 팩토리 메소드 패턴(Factory Method Pattern) 7. 팩토리 메소드 패턴(Factory Method Pattern) - 하위 클래스에서 객체를 생성하는데, 상위 클래스에서 그 객체에 대해 몰라도 된다는 것. 예) 피자가게로 든다. - 슈퍼클래스(피자가게)에 피자 생성이라는 가상함수를 만들어 놓고 각각의 하위 클래스(하위 피자가게)에서는 피자를 생산하는 것을 공통으로 갖고 뭘 생산하는 것에 대해선 하위 클래스에 위임?(구현)을 하는 것이다. ㆍ하위 클래스에서 객체 생성 함수를 구현하여 상위 클래스와 실제 생성되는 객체와의 의존성을 제거 더보기
패턴 - 6. 템플릿 메소드 패턴(Template Method Pattern) 6. 템플릿 메소드 패턴(Template Method Pattern) - 상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화 한다. - 여러 클래스에 공통되는 사항은 상위 추상 클래스에서 구현하고, 각각의 상세 부분은 하위 클래스에서 구현 - 위 예제로 보면 음료수를 만들 경우 각각 커피와 홍차는 음료로부터 중복되는 코드가 발생한다.ㆍ 중복코드 : 물을 끓인다, 컵에 따른다 - 여기서 중복되는 코드를 상위 음료 클래스에서 구현하고 각각의 세부적인 부분들은 하위 클래스에서 구현한다. - 이렇게 중복되는 코드는 상위클래스에서 구현하고 하위 클래스에선 중복되지않은 것들만 구현한다. 더보기
패턴 - 5. 데코레이터 패턴(Decorator Pattern) 5. 데코레이터 패턴(Decorator Pattern) - 객체를 동적(Dynamic)으로 서브 클래스를이용해서 확장한다. - 기본 클래스 및 해당 객체 자체에 추가적인 서브 클래스를 구성해서 생성자 파라메터로 객체를 넘겨서 원하는 기능을 표현하는 방법 - 구현 클래스와 같은 형식의 데코레이터를 생성하고 해당 데코레이터를 구현한 다양한 서브클래스를 생성한다. - 구현 클래스와 타입(A)이 같으므로 덧씌울 수 있다. ※ 쉽게 생각하면 구현 되어 있는 클래스가 있고 새롭게 재정의? 구현을 다시 한다면 기존 코드를 복사한 Decorator를 생성 한 다음 서브 클래스에서 다시 재정의 해서 사용하는 방법이다.자식 클래스?에서 다시 덮어 씌운다는 생각을 갖자 5.1 특징 및 장단점 5.1.1 특징 - 다양한 부가.. 더보기
패턴 - 4. 스트래티지 패턴(Strategy Pattern) 4. 스트래티지 패턴(Strategy Pattern) - 객체가 상태를 가지고 있고 현재 상태에 따라 행동이 달라지는 것을 말한다. - 왼쪽 UML 다이어그램을 보면 추상 클래스로 Animal을 만든 후 동물의 공통함수 Cry(울기), Move(움직이기), Display(보여주기) 메소드를 정의 했다. - 그 후 독수리와 호랑이는 Animal 클래스를 상속 받았으며 메소드들을 정의 했다. - 상속보다는 구성을 활용 - 구현이 아닌 인터펭스에 맞춰서 프로그래밍을 하도록한다. - 기존 Animal에 Fly나 Cry를 추가 할경우 Animal에 넣어 상속시키는 것이 아니라 Fly와 Cry의 함수를 따로 빼 캡슐하 하여 사용하도록 한다. - 변하는 부분을 캡슐화 하여 해당 기능을 인터펭스에 위임한다. - 코드의.. 더보기
패턴 - 3. 옵저버 패턴(Observer Pattern) 3. 옵저버 패턴(Observer Pattern) - 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식 ㆍ 1대다의 의존성을 정의 - 간략하게 설명한다면 ㆍ디스플레이1,2,3이 옵저버패턴 시스템에 등록되어 있다면 각 센서에서 새로운 값이 들어오면 옵저버로 등록되어 있는 디스플레이 장비에도 갱신된데이터를 전송하는 것이다. 3.1 옵저버 패턴을 구현 방법은 - JDK에서 지원하는 Observable과 Observer API를 활용하는 방법 - API를 활용하지 않고 직접 구현하는 방법 3.2 옵저버 패턴의 문제점 - Observable은 클래스다. ㆍObservable는 클래스 이기 때문에 서브클래스를 만들어야 한다. 이미 다른 수퍼클래스를 사용하고 있는.. 더보기
cUrl 사용 push wstring 의 데이터를 MultiByte형태로 바꿔 준 후 static std::string ToAnsiString(const std::wstring& src, UINT codePage) { std::string strReturn; const int nLength = ::WideCharToMultiByte(codePage, 0UL, src.c_str(), -1, nullptr, 0, nullptr, nullptr); if (nLength < 0) return strReturn; strReturn.resize(nLength); const int nResult = ::WideCharToMultiByte(codePage, 0UL, src.c_str(), -1, &strReturn[0], nLength, n.. 더보기
Port OpenCheck 해당 함수는 Local Com에서 사용자가 원하는 Port가 열려있는지 상태를 체크한다. bool cSessionEx::ServerPortOpneCheck(u_short port) { bool check = false; PMIB_TCPTABLE pTable = NULL; DWORD dwSize = 0; if (::GetTcpTable(NULL, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER) { if (dwSize>0) { pTable = new MIB_TCPTABLE[dwSize]; if (::GetTcpTable(pTable, &dwSize, TRUE) !=NO_ERROR) { //printf("현재 TCP Port는 Close 상태입니다.\n"); //printf(".. 더보기
Program Rerun 해당 함수는 사용자가 설정한 폴더 경로에 있는 exe프로그램...을 실행시킨다. bool cSessionEx::ProgramRerun(wchar_t Directory[], wchar_t Process_name[]) { bool bRet = false; SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_FLAG_NO_UI;// SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = 실행파일//_T("Sentinel.exe"); ShExecInfo... 더보기