전체 글 101

[내일배움캠프 - 언리얼] DAY 21 - Unreal Engine C++ 활용 프로그램 제작

목표필수 기능시작점은 (0, 50, 0) 에서 시작합니다.생성한 Actor C++ → Blueprint로 상속한 다음 Blueprint에서 StaticMesh추가 후 Cube로 지정Turn, Move 함수를 만들고 함수를 호출하여 10회 랜덤으로 회전 및 이동 합니다매번 이동시 현재 좌표를 출력 합니다.로그 출력은 AddOnScreenDebugMessage를 활용합니다.도전 기능필수 기능 구현을 완료한 후 아래 기능을 추가 힙니다.시작점은 (0, 50, 0)이고 한번 이동시 현재 좌표 및 이동 횟수를 출력 합니다.10회 이동시 각 스텝마다, 50% 확률로 랜덤하게 이벤트가 발생합니다.(발생 시키는 부분도 구현하셔야 합니다.)각 스텝마다 이벤트 발생(이벤트함수를 따로 생성해서 진행해주세요.)여부를 출력합니..

[내일배움캠프 - 언리얼] DAY 19 - 디자인 패턴

디자인 패턴개발 시 반복적으로 등장하는 문제를 해결하기 위한 일반화된 솔루션크게 3개로 분류된다.생성 패턴새로운 것을 만들어내는 방법과 관련된 패턴싱글톤, 팩토리, 빌더, 프로토타입 등구조 패턴여러 부품을 어떻게 조립하고 연결하는 방법에 대한 패턴어뎁터, 브릿지, 데코레이터 등행동 패턴부품이 서로 어떻게 상호작용할지에 대한 패턴옵저버, 이터레이터, 상태, 인터프리터 등 싱글톤 패턴유일한 객체를 가지도록 생성하고 제한한다.class Airplane {private: static Airplane* instance; // 유일한 비행기 객체를 가리킬 정적 포인터 int positionX; // 비행기의 X 위치 int positionY; // 비행기의..

[내일배움캠프 - 언리얼] DAY 18 - 연금술 공방 관리 시스템 구현

#include #include #include #include using namespace std;// PotionRecipe 클래스: 재료 목록을 vector으로 변경class PotionRecipe {public: string potionName; vector ingredients; // 단일 재료에서 재료 '목록'으로 변경 // 생성자: 재료 목록을 받아 초기화하도록 수정 PotionRecipe(const string& name, const vector& ingredients) : potionName(name), ingredients(ingredients) { }};// StockManager 클래스: 레시피 재고 관리class StockManager {pr..

[내일배움캠프 - 언리얼] DAY 17 - 객체지향적 설계

응집도클래스 또는 모듈 내부의 구성 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.응집도가 높을수록 좋은 설계라고 평가된다. 응접도가 낮은 경우란, 서로 관련 없는 기능들이 하나의 클래스에 포함된 경우를 말한다. 응집도가 높은 코드 예시)결합도모듈 또는 클래스 간의 의존성을 나타낸다.결합도가 낮을수록 좋은 코드이다. 결합도가 낮은 코드 예시)SOLID 원칙객체지향 설계에서 유지 보수성과 확장성을 높이기 위한 5가지 원칙단일 책임 원칙 (SRP)각 클래스는 하나의 책임만 가져야 한다는 원칙개방 폐쇠 원칙 (OCP)확장에는 열려 있어야 하고, 수정에는 닫혀있어야 한다는 개념기존 코드는 최대한 유지하면서 새로운 기능을 추가할 수 있도록 설계해야한다. 리스 코프 치환 원칙 (LSP)자식 클래스는 부모 클래..

[내일배움캠프 - 언리얼] DAY 16 - STL 기초

STL ( Standard Template Library)C++ 표준 라이브러리의 일부로, 컨테이너, 알고리즘, 반복자 등의 템플릿 기반 구성 요소를 포함한다.다양한 자료구조와 알고리즘을 직접 구현하지 않고도, 사용할 수 있다 컨테이너데이터를 담는 자료구조모든 컨테이너는 템플릿으로 구현되어 있어, 다양한 타입의 데이터를 저장할 수 있다.모든 컨테이너는 메모리 관리를 내부적으로 한다. 따라서 사용 시 메모리 해제를 직접 고려하지 않아도 된다.대부분 컨테이너는 반복자를 제공한다. 따라서 내부 구현을 몰라도 동일한 방식으로 컨테이너를 순회할 수 있다.벡터특정 타입에 종속되지 않는다.원소 개수에 따라 내부 배열의 크기가 자동으로 조절된다.임의 접근이 가능하다.삽입, 삭제는 맨 뒤에 하는게 좋다.vector ve..

[내일배움캠프 - 언리얼] DAY 15 - 템플릿

함수 오버로딩c++에서는 함수 이름과 매개변수 타입 정보를 함께 사용해 구분하기 때문에 동일한 이름의 함수를 여러 개 정의할 수 있다.Name mangling : 함수 이름 구분을 위해 내부적으로 고유한 이름을 부여하는 것 함수 오버로딩이 가능해지는 조건- 매개변수 타입이 다른 경우- 매개변수 개수가 다른 경우 함수 오버로딩이 되지 않는 경우- 타입 변환이 가능한 매개변수로 두 개 이상의 오버로딩된 함수가 호출 후보가 되는 경우- 디폴트 매개변수로 인해 함수 호출 형태가 중복되는 경우- 매개변수의 타입만 포인터와 배열로 다른 경우- 함수의 변환 타입만 다른 경우 함수 오버로딩 순서 템플릿template 타입에 관계없이 일반화된 코드를 작성하기 위한 문법// 목적: 함수 템플릿을 이용해 두 값을 더하는 ..

[내일배움캠프 - 언리얼] DAY 14 - 메모리 관리하기

스택 메모리 (stack)일반 변수들은 대부분 스택 메모리 공간을 차지한다.가장 큰 특징은 변수의 생존주기가 끝나면 할당되었던 메모리가 자동으로 회수된다. 단점으로는 할당 가능한 스택 메모리의 크기가 제한적이고, 변수의 생존 영역을 벗어나면 자동으로 해제되므로 메모리를 더 길거나 유연하게 관리하기 어렵다. 힙 메모리 (heap)동적 할당시 new 연산자를 사용하고 해제시 delete 연산자를 사용한다.자동으로 해제되지 않으므로 메모리 누수 등의 위험이 있다.생존 주기가 사용자가 delete로 해제하기 전까지 유지된다.댕글링 포인터 (dangling pointer)이미 해제된 메모리의 주소를 계속 가지고 있는 포인터를 말한다.메모리 누수 (memory leak)동적으로 할당한 메모리를 사용한 후 제대로 해..

[내일배움캠프 - 언리얼] DAY 13 - 간단한 직업(클래스) 만들기 - 2

Monster.h#pragma once#include "Player.h"#include using namespace std;class Monster {public: Monster(string name); // 생성자 // 몬스터의 공격 함수 void attack(Player* player); // 몬스터의 속성값을 리턴하는 get 함수 string getName(); int getHP(); int getPower(); int getDefence(); int getSpeed(); // 몬스터의 속성값을 정의하는 set 함수 void setName(string name); bool setHP(int HP); void setPower(in..

[내일배움캠프 - 언리얼] DAY 12 - 간단한 직업(클래스) 만들기 - 1

전직 시스템과 전투 시스템Player.h#pragma once#include using namespace std;class Player {public: Player(string nickname); // 생성자 virtual void attack() = 0; // 순수 가상 함수 void printPlayerStatus(); // 스탯 출력 // getter 함수 string getJobName(); string getNickname(); int getLevel(); int getHP(); int getMP(); int getPower(); int getDefence(); int getAccuracy(); int getSpeed()..