1. 개념 1. 스마트 포인터C++에서 제공하는 스마트 포인터는 자동 메모리 관리를 제공하는 포인터 클래스입니다. 스마트 포인터는 일반 포인터와 같이 참조/역참조 연산이 가능하며, 가리키는 객체의 수명이 끝나면 자동적으로 메모리 해제를 수행하여 메모리 릭을 방지합니다. 따라서, 사용자는 스마트 포인터 사용을 통해 동적 할당 받은 메모리 영역에 대한 명시적인 해제 작업에 대한 부담 없이 안전하고, 효율적인 코드 작성이 가능합니다. 2. auto_ptr 1. 사용 금지!!!!C++ 11 표준 이전에 제공되던 "auto_ptr"은 심각한 단점을 안고 있습니다. "auto_ptr"은 vector와 같은 STL 컨테이너에서는 정상적을 작동되지 않습니다! 따라서, "auto_ptr"는 사용하지 맙시다! 3. u..
[Basic C++] #59_가비지 컬렉션C++의 "가비지 컬렉션"에 대해 알아보겠습니다."전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 개념가비지 컬렉션은 자동 메모리 관리 기법 중 하나로, 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제하는 프로세스입니다. 가비지 컬렉션은 자동 메모리 관리를 통해 댕글링 포인터 발생을 방지하고, 편의성을 제공하지만, 런 타임 오버헤드를 유발합니다. 마크 앤 스윕 알고리즘마크 앤 스윕 알고리즘은 가비지 컬렉션의 접근 방법 중 하나로 주기적으로 모든 포인터에 대해 해당 메모리를 참조하여 사용하는 부분이 있는지 검사하여 표시(마크)합니다. 각 검사 주기가 끝날 때마다 표시되지 않은 메모리를 "미사용"으로 취급하여 ..
[Unreal_블루프린트]#22_Wizard Skills Unreal 블루프린트 개발 중 "Wizard Skills"에 대해 알아보겠습니다. "블루 프린트" 활용에 대한 내용입니다. 상속 모델 Heal 1. BP_WizardSkill_Heal 클래스 세팅을 통해 Parent Class를 "BP_WizardSkill"로 설정합니다. 2. BP_WizardSkill::Spell 구현 1. BPI_Weapon::SetCanMove "BPI_Weapon" 인터페이스에서 제공하고 "BP_Player"에서 상세 구현을 진행했던 "Set Can Move"를 호출합니다. 2. BP_Player의 애님 몽타주 재생 "BP_WizardSkill"에서 제공하는 "GetOwner To Wizard"를 통해 "BP_Player..
[Programmers 알고리즘, C++]#Level 2_이진 변환 반복하기 Programmers 알고리즘 문제 풀이, Level 2_이진 변환 반복하기 이진 변환 알고리즘과 STL 알고리즘을 활용하여 풀이하는 문제입니다. 문제 풀이 #include #include #include using namespace std; bool Pred(char c) { return c == '0'; } vector solution(string s) { vector answer; int delete0Cnt = 0; int decToBinCnt = 0; vector tmpV; while(s != "1") { // 1. 0 제거, for 문을 돌면서 삭제하면 String에 직접적인 변화 for(int i=0; i 이진 변환 ..
[Programmers 알고리즘, C++]#Level 2_JadenCase 문자열 만들기 Programmers 알고리즘 문제 풀이, Level 2_JadenCase 문자열 만들기 cctype 제공 함수를 활용하여 풀이하는 문제입니다. 문제 풀이 /* * #include 제공 함수 주의할 점 : islower(), isdigit(), isupper() 등의 함수는 반환 값이 int입니다. if(islower(str[i]) == true)는 정상적으로 수행되지 않습니다! */ #include #include #include using namespace std; string solution(string s) { string answer = ""; bool changeCheck = true; if (isdigi..
[Programmers 알고리즘, C++]#Level 1_정수 내림차순 정렬 Programmers 알고리즘 문제 풀이, Level 1_정수 내림차순 정렬 char int 간 변환과 string 정수 간 변환을 활용하여 풀이하는 문제입니다. 문제 풀이 // 1. char to int = -'0' // 2. int to char = +'0' // 3. stoi, stol, stof, stod 활용 #include #include #include using namespace std; long long solution(long long n) { long long answer = 0; vector v; string str = to_string(n); for(int i=0; i char 변환을 위해 + '0' 해줍..
[BOJ 알고리즘, C++] #10816_숫자 카드 2, lower_bound, upper_bound BOJ 알고리즘 문제 풀이, 10816_숫자 카드2 정렬 알고리즘을 통해 주어진 숫자 카드가 존재하는지 탐색합니다. 문제 풀이 1. Map 컨테이너 활용 // 1. Map 컨테이너를 활용했지만, 2번 코드보다 소요 시간과 메모리 사용량이 비교적 훨씬 높음... #include #include #include typedef long long ll; using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M; // 숫자 + 개수 map m; vector v; cin >> N;..
[디자인 패턴] #12_Component Pattern, 컴포넌트 패턴 게임 디자인 패턴 중 "디커플링 패턴"에 대해 알아보겠습니다. "게임 프로그래밍 패턴"의 14 항목, "컴포넌트"에 해당하는 내용입니다. 개념 1. 의도 한 객체가 여러 분야의 기능들을 "커플링" 없이 다룰 수 있도록 합니다. 복잡한 상속 관계를 통해 여러 기능들을 상속받아 사용하기보다, 각 기능 별 컴포넌트 클래스를 작성하고 해당 클래스 객체를 데이터 멤버로 두어 "디커플링"합니다. 패턴 1. 컴포넌트 패턴 한 객체에 필요한 다양한 분야의 기능들을 별도의 컴포넌트 클래스로 옮겨놓고, 이를 필요로 하는 객체는 단순히 "컴포넌트들의 컨테이너" 역할을 합니다! 2. 왜 필요한가? class Player { public: Player():..
[Basic C++] #57_동적 메모리 C++의 "동적 메모리"에 대해 알아보겠습니다. "전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 동적 메모리 1. 메모리 구조 1. 코드 영역 : 컴파일된 프로그램이 저장되는 영역, ready-only! 2. 데이터 영역 : 전역 변수 및 정적 변수가 저장되는 영역 3. 힙 영역 : 동적으로 할당된 변수를 저장하는 영역 4. 스택 영역 : 함수 매개변수, 지역 변수 및 기타 함수 관련 데이터가 저장되는 영역 2. Heap 정적 메모리와 반대로 힙은 동적 메모리 할당에 사용되는 공간입니다. 동적 메모리 할당이란, 프로그램 실행 중에 메모리 공간을 할당받는 것을 의미하며, 프로그램의 종료와 함께 해제해주어 운영체제에 반납해야 합니다..
[디자인 패턴] #11_타입 객체, Type Object 게임 디자인 패턴 중 "타입 객체"에 대해 알아보겠습니다. "게임 프로그래밍 패턴"의 13 항목, "타입 객체"에 해당하는 내용입니다. 개념 1. 타입 객체 클래스 하나를 인스턴스 별로 다른 객체형으로 표현하며, 앞으로 추가할 새로운 클래스들을 유연하게 만들 수 있게 합니다. 2. 왜 필요한가? #include using namespace std; class Monster { public: virtual ~Monster(); virtual string getAttack() = 0; protected: Monster(int initialHealth):health(initialHealth){} private: int health; }; class Dr..