C++ 31

빌더 패턴

빌더 패턴이란?객체 생성 과정을 캡슐화하고, 복잡한 객체를 단계적으로 구성할 수 있게 해주는 디자인 패턴 중 하나다.이 패턴은 주로 객체를 생성하는 데 여러 단계가 필요하거나, 동일한 생성 과정을 통해 다양한 표현을 만들어야 할 때 유용하다.빌더 패턴의 주요 구성 요소Product(제품) : 최종적으로 생성될 복잡한 객체Builder(빌더) : 객체를 생성하기 위한 인터페이스 또는 추상 클래스. 단계별로 객체를 구성하는 메서드를 정의한다.ConcreteBuilder(구체적인 빌더) : Builder 인터페이스를 구현하여 실제로 Product를 만드는 클래스.Director(디렉터) : 빌더를 사용해 객체를 구성하는 과정을 관리하는 클래스(이건 선택).예시1. Product 클래스#include #incl..

C++/개념정리 2025.03.11

템플릿 메서드 패턴

템플릿 메서드 패턴이란? 알고리즘의 구조를 부모 클래스에서 정의하고, 구체적인 단계는 서브클래스에서 구현하는 행동 디자인 패턴특징부모 클래스의 템플릿 메서드가 전체 알고리즘 흐름 제어일부 단계는 추상 메서드로 선언(순수 가상 함수)해서 자식 클래스에서 강제 구현 필요코드 중복 최소화 및 확장성 향상예시1. 추상 부모 클래스#include #include using namespace std;// 추상 부모 클래스class Beverage {public: // 템플릿 메서드: 전체 과정을 정의 void prepareRecipe() { boilWater(); // 공통 단계 brew(); // 자식 클래스에서 구현 pourI..

C++/개념정리 2025.03.07

상태 패턴

상태패턴이란?객체의 내부 상태가 변경될 때 동작을 전환하도록 하는 디자인 패턴이다.상태별 동작을 개별 클래스로 분리해 조건문 if-else, switch 복잡도를 제거하는게 핵심 목적이다왜 if-else를 분리할까?간단한 조건문은 if-else를 나누면 되지만 조건에 따라 동작하는게 복잡해지고, 또 확작을 계속 하고 싶을 때 유지보수가 힘들어지기 때문이다.상태패턴 구성 요소Context상태를 관리하는 주체State Interface모든 상태의 공통 인터페이스 정의Concrete State구체적인 상태별 동작 구현Context가 State 인터페이스에 작업 위임Concrete State 객체에서 실제 동작 수행상태 변경 시 Context의 상태 포인터 갱신장단점장점조건문 감소: 상태 검증 로직 제거 → 코..

C++/개념정리 2025.03.05

전략패턴

전략패턴이란?알고리즘을 정의하고, 알고리즘을 각각의 전략으로 캡슐화하여 클라이언트에서 독립적으로 사용할 수 있도록 하는 패턴이다.주요 구성 요소전략 인터페이스(Strategy Interface): 다양한 전략들이 구현해야 하는 공통 인터페이스를 정의합니다.구체적인 전략(Concrete Strategy): 전략 인터페이스를 구현하는 클래스들로, 각기 다른 알고리즘을 구체적으로 정의합니다.컨텍스트(Context): 전략을 사용하는 클라이언트 클래스입니다. 이 클래스는 전략 인터페이스를 통해 다양한 알고리즘을 사용할 수 있습니다.이런 구조 덕분에 런타임 중에 알고리즘을 변경한다던가, 코드 구성 시 조건문(if else)를 줄일 수 있다던가, 새로운 전략을 추가하기 쉽다는 큰 장점들을 가지고 있다. 전략요소 예..

C++/개념정리 2025.02.26

[디버그 입문]

게임을 시작하고 내가 원하는대로 안될 때 정말 답답하다. 이 때 어디서 무엇을 고쳐야 할 지 찾아보도록하자. 발단은 내가 소환한 아이템중 코인아이템을 전부 다 먹으면  다음 스테이지로 넘어가게 설계를 하였는데 코인을 다 먹어도 이동하지 않는것이다. 여기서 뭐가 문제인지 찾아봐야하는데 아직 나에게는 너무 복잡하고 많은 코드들 중 뭐가 문제인지 찾기가 쉽지 않았다. 문제의 코드 차트#include "CH_GameState.h"#include "Kismet/GameplayStatics.h"#include "SpawnVolume.h"#include "CH_GameInstance.h"#include "CoinItem.h"ACH_GameState::ACH_GameState(){ Score = 0; SpawnedCo..

C++/개념정리 2025.02.11

개념정리[연산자(&*)]

C++을 공부하다보면 특정 코드를 보고 배우거나 하는데 내가 직접 할 때 헷갈리는것들이 몇개 있는데 제대로 개념을 잡고가기위해 쓰는 메모장이다.&연산자1. &(주소 연산자)변수의 주소를 가져올 때 사용된다. 이는 포인터와 함께 사용할 때 유용하다.int main() { int x = 10; int* ptr = &x; // ptr은 x의 메모리 주소를 가리킴 cout 2. &(참조 연산자)참조를 선언할 때 사용된다. 참조는 변수의 별명처럼 동작하며, 원본 변수와 동일한 메모리 위치를 참조int main() { int y = 20; int& ref = y; // ref는 y의 참조 cout 참조인데 ref를 변경하면 y값도 변경이 되는걸 볼 수 있다. 말 그대로 변수의 별..

C++/개념정리 2025.02.07

[프로그래머스] 3진법 변환 후 뒤집어 10진법 변환

이걸 들고 온 이유는 내 생각대로 문제를 풀고, 결과값은 잘 나오는데 문제에서 오답처리가 계속 돼 어려웠던 문제라 이 문제들을 풀면서 겪었던 과정과 이 과정들을 통해 배운 부분을 기록하기위해서다.문제자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.제한사항n은 1 이상 100,000,000 이하인 자연수입니다.입출력 예nresult457125229입출력 예 설명입출력 예 #1답을 도출하는 과정은 다음과 같습니다.n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현45120000217따라서 7을 return 해야 합니다.사고 풀이숫자를 3진법으로 변환변환한 숫자 뒤집기다시 10진법으..

C++ 2025.02.05

C++[아이템을 다른 헤더파일에서 가져와서 사용하기]

생각해보니 아이템 전체를 배열로 받을 친구는 Shop밖에없다. 그래서 나는 그냥 Shop을 생성할 때 모든 아이템을 담을 포인트를 저장하는 배열을 만들고 거기에 아이템들을 추가시켜줄 생각이다.처음에는 그냥 vector를 헤더파일에서 선언하고 vector all_items;//모든 아이템 저장 백터 vector items_for_sale;//판매할 아이템 vector RandomItem();// 아이템을 랜덤으로 선택이렇게 넣어주고Shop::Shop(){ all_items.push_back(new Sword40()); all_items.push_back(new VampiricDagger()); all_items.push_back(new HP_Blade4()); all_..

C++ 2025.01.14

C++[텍스트 RPG에서 상점 만들기(2. 구매, 판매)]

아이템 구매상점에서 구매가능한 아이템을 보여주고 선택지를 준다.입력받는다.선택한 번호 확인아이템 살 돈이있는지 확인한다.아이템 가져갈 무게가 있는지 확인한다.통과되면 골드를 뺀고 아이템을 유저 인벤토리에 추가시켜준다.1.상점에서 구매가능한 아이템을 보여주고 선택지를 준다. cout > choice;우선 for문을 보겠다.size_t 이거는 unsigned int와 같은 음수가 되지않는 타입이다. 배열의 경우 0보다 낮은곳을 가리키게되면 쓰레기값이 나가거나 치명적 오류가 생길 수 있기 때문에 안정성을 위해 넣어줬다. 그 후 4. 뒤로가기로 해줬다. 확장성을 위해서라면 items_for_sale.size() + 1 로 해도 되지만 나는 뒤로가기 번호가 자꾸 바뀌면 불편할거같아서 4로 고정했다. 2. 입력받는..

C++ 2025.01.13

C++[코드변경 깃허브 적용]

쉬운 해결법파일 코드를 계속 수정하는데 깃허브에 업데이트가 안돼서 너무 곤란했었다. 그 때 정말 쉽게 해결방법을 알려준분이 계신다. 1.다른이름으로 ~~저장이걸 눌러주고2. 저장 옆의 드롭다운을 눌러 인코딩하여 저장 3. 인코딩을 유니코드(서명 있는 UTF-8)로 저장그리고 덮어써주면 된다 막히면 검색해도안나와서 답답했는데 이제 됐다

C++/개념정리 2025.01.13