분류 전체보기 33

인벤토리 시스템 구현

데이터 보관함: Inventory 클래스 설계템플릿 클래스 선언아이템, 무기, 포션 등 어떤 타입이든 담을 수 있게 만듭니다.클래스 이름: Inventory템플릿: template 를 사용하여 어떤 타입(T)의 데이터든 처리할 수 있도록 합니다.내부 멤버 변수 구성 (Private)T* pItems_: 아이템 객체들을 저장할 동적 배열을 가리키는 포인터입니다.new T[]를 통해 메모리를 할당받습니다.int capacity_: 인벤토리가 최대로 저장할 수 있는 공간의 크기입니다.int size_: 현재 인벤토리에 저장된 아이템의 실제 개수입니다.탄생과 소멸: 생성자와 소멸자생성자 구현 : Inventory(int capacity = 10)인벤토리 객체가 생성될 때 호출됩니다.매개변수로 용량(capacit..

카테고리 없음 2026.03.23

C++ 프로그래머스 서울에서 김서방 찾기 to_string()

#include #include using namespace std;string solution(vector seoul) { string answer = ""; for(int i = 0; i https://school.programmers.co.kr/learn/courses/30/lessons/12919#qna 이 문제를 풀기 위해서 find()와 C++의 형변환에 대해서도 공부를 했으나, 핵심은 to_string에 있었다. answer 변수가 string 타입이고, 리턴 역시 문자열로 해줘야 하지만,Kim이 벡터 seoul 의 몇 번째 인덱스에 있는지 찾아야하고, 해당 인덱스를 반환해야 하기 때문에 조금 골치아픈 문제였다. to_string은 string 헤더파일을 선언하면 쓸 수 있..

카테고리 없음 2026.03.19

C++ SOLID원칙

SOLID 원칙이란 객체지향 설계에서 유지 보수성과 확장성을 높이기 위한 5가지 원칙을 의미합니다. SOLID 원칙의 주요 목적은 다음과 같습니다.유지보수성 및 확장성 향상변경에 유연한 설계 제공단일 책임 원칙 SRP각 클래스는 하나의 책임만 가져야 한다는 원칙입니다.즉, 클래스 하나의 변경 이유만을 가져야 하며, 특정 기능이나 역학을 수행하는 데 집중해야 합니다. 아래 상황을 구현해 봅시다.학생의 이름을 받을 수 있어야 합니다학생의 이름을 출력할 수 있어야 합니다학생의 점수를 받고 성적을 계산할 수 있어야 합니다잘못 적용된 사례아래와 같이 Student 클래스에 모든 메서드가 구현된 경우입니다.Student 클래스는 Sudent 정보만 있는 게 최선입니다.#include #include class St..

카테고리 없음 2026.03.18

C++ 결합도

결합도는 모듈 또는 클래스 간의 의존성을 나타냅니다.일반적으로 결합도는 낮을수록 좋은 코드입니다. 결합도가 높으면 각 모듈 간 의존성이 강해져, 하나의 모듈이 변경될 때, 다른 모듈도 영향을 받게 됩니다. 결합도 실제 예시자동차와 엔진의 관계를 코드로 구현해 봅시다.자동차는 초기에 Engine이 장착되어 있습니다.자동차 시동이 걸리면 엔진이 동작한다고 출력합니다.하지만 이제 엔진의 종류가 다양해졌고, 자동차가 여러 종류의 엔진을 지원해야 합니다.결합도가 높은 코드자동차 클래스가 디젤 엔진 클래스를 직접 포함합니다.이 구조는 아래와 같은 문제점이 있습니다.새로운 전기 엔진을 추가하려면 자동차 클래스도 수정해야합니다변경이 잦은 경우 수정 범위가 커지고 유지 보수가 어려워집니다.//기능 추가 전 예시코드#in..

카테고리 없음 2026.03.17

C++ 응집도

응집도응집도는 클래스 또는 모듈 내부의 구성 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다.따라서 응집도가 높을수록 좋은 설계라고 평가됩니다. 응집도가 낮은 경우응집도가 낮은 경우란, 서로 관련 없는 기능들이 하나의 클래스에 포함된 경우를 말합니다.이를 하나의 목적을 가진 팀과 각기 다른 목적을 가진 팀에 비유할 수 있습니다. 응집도가 높은 경우응집도가 높은 경우는 서로 관련 있는 모듈들만 하나의 class에 있는 경우입니다. 응집도 실제 예시아래 기능을 제공하는 코드를 구현해 봅시다특정 문자열을 받고 메시지를 출력두 수의 합을 반환특정 문자열을 받고 역으로 출력그리고 추가적으로 아래 기능이 추가되는 상황입니다두 수의 곱을 반환하는 기능 추가특정 문자열을 받고 메시지를 출력하기 전 대문자로 변환합..

카테고리 없음 2026.03.17

간단한 전직 시스템 구현

필수 기능1.기본 클래스(설계도) 정의- Player 클래스 선언- 모든 직업의 부모가 되는 기본 클래스 Player를 만듭니다.- 순수 가상 함수 attack() 포함- virtual void attack() = 0; 을 선언하여, 이 클래스를 상속받는 자식들은 **무조건** 이 함수를 구현하도록 해야 합니다.- 이 함수는 단순히 무기를 휘두르는 동작의 '이름'만 정해준 것입니다.2.직업 클래스 생성 (상속과 재정의)4가지 직업 클래스 만들기Warrior(전사), Magician(마법사), Thief(도적), Archer(궁수) 클래스를 생성합니다.각 클래스는 Player를 상속 받습니다.직업별 공격 기능 구현 (오버라이딩)각 직업에서 attack() 함수를 다시 정의하세요.전사: "검을 휘두릅니다!"..

카테고리 없음 2026.03.13

C++ STL -알고리즘 (sort, find), 반복자

STL은 다양한 컨테이너와 독립적으로 동작하는 범용 알고리즘을 제공합니다.예를 들어, 특정 원소 값을 찾거나, 정렬을 하는 등의 기능을 표준 라이브러리에서 바로 사용할 수 있습니다. sort컨테이너 내부의 데이터를 정렬하는 함수입니다.기본 타입의 경우 사용자 정렬 함수 없으면 오름차순으로 정렬됩니다.또한 사용자 정렬 함수를 정의할 수도 있습니다. 사용자 정렬 함수 comp(a, b) 구현 시 알아두어야 할 것은 아래와 같습니다.현재 컨테이너에서 첫 번째 인자 a가 앞에 있는 원소를 의미합니다.comp(a, b)가 true 이면 a와 b의 순선느 유지됩니다.만약 false인 경우 a와 b의 순서를 바꿉니다.//sort를 활용, 기본타입 배열을 정렬하는 예시(정렬 기준 없음)#include #include ..

카테고리 없음 2026.03.12

C++ STL - Map

맵특정 키를 사용하여 값을 검색하는 기능을 제공하는 컨테이너 맵은 키를 활용하여 값과 쌍으로 저장하고 검색 맵의 선언맵을 선언할 때는 키-값 쌍을 저장하기 위해 키 타입과 값 타입 두 가지를 지정해야 합니다.이 두 타입은 동일할 수도 있고, 서로 다를 수도 있으며, 키 타입은 비교 연산이 가능해야 합니다.#include #include using namespace std;// 정수 키와 문자열 값을 저장하는 map 예제int main() { map studentMap; // 요소 추가 studentMap[101] = "Alice"; studentMap[102] = "Bob"; studentMap[103] = "Charlie"; // 요소 출력 for (const au..

카테고리 없음 2026.03.12

C++ STL - Vector

STL (Standard Template Library)은 C++ 표준 라이브러리의 일부로, 컨테이너, 알고리즘, 반복자 등의 템플릿 기반 구성 요소를 포함합니다.STL을 활용하면 다양한 자료구조와 알고리즘을 직접 구현하지 않고도, 사용할 수 있습니다.컨테이너컨테이너는 데이터를 담는 자료구조를 말합니다.데이터를 담는 방식이나 제공하는 메서드에 따라 여러 가지 컨테이너를 제공합니다.모든 컨테이너는 템플릿으로 구현되어 있으므로, 다양한 타입의 데이터를 저장할 수 있습니다.모든 컨테이너는 메모리 관리를 내부적으로 합니다. 따라서 사용 시 메모리 해제를 직접 고려하지 않아도 됩니다.대부분 컨테이너는 반복자를 제공합니다. 따라서 내부 구현을 몰라도 동일한 방식으로 컨테이너를 순회할 수 있습니다.벡터(Vector)..

카테고리 없음 2026.03.11

언리얼엔진의 메모리 관리

언리얼 엔진은 객체들의 메모리 관리를 자동화하기 위해 가비지 컬렉션 시스템을 사용합니다. 가비지 컬렉션은 더 이상 사용하지 않는 메모리를 알아서 치워주는 것과 같다고 할 수 있습니다. 이를 통해 개발자가 메모리 해제를 수동으로 처리하는 부담을 덜고, 메모리 누수나 댕글링 포인터와 같은 메모리 오류를 줄일 수 있습니다. 가비지 컬렉션은 마크 앤 스윕 알고리즘 방식으로 동작합니다.이 알고리즘은 주기적으로 실행되며, 더 이상 프로그램에서 사용하지 않는다고 판단되는 UObject 들을 식별하여 메모리에서 제거합니다. 루트셋에서 시작- 먼저 루트셋에 포함된 객체들을 식별합니다.- 이 객체들은 항상 살아있다고 간주되는 특별한 객체입니다.- 예를 들어, 게임 엔진 자체, 플레이어 컨트롤러 등이 루트셋에 포함될 수 있..

카테고리 없음 2026.03.06