| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 게임개발
- 포인터
- C언어
- Vector
- C++
- 언리얼5
- 게임 개발
- 언리얼
- 언리얼 엔진5
- Unreal
- 복사생성자
- Unreal Engine5
- 언리얼엔진5
- 언리얼엔진
- AI
- Unreal Engine
- CPP
- cpp개발
- effectivec++
- 프로그래밍
- 게임프로그래밍패턴
- 스마트포인터
- 디자인패턴
- 프로세스
- 자료구조
- UE5
- 데이터구조
- BehaviorTree
- 복사대입연산자
- 배열
- Today
- Total
목록전체 글 (52)
리얼 개발
작년 11월에 언리얼 클라이언트 개발자로써 취업을 성공한 뒤 수습 기간을 통과하여 취업을 준비하시는 분들이 참고(?) 할만한 글을 작성해보려 합니다. 필자는 26년 2월 대학 졸업 예정인 학생으로 4학년 1학기를 마무리 하고 본격적으로 취업 시장에 뛰어들었습니다. 저는 군대를 복학하고 나서부터 대학 생활동안 노션과 깃허브 웹페이지를 통해 포트폴리오를 꾸준히 작성해왔습니다. It 업계에 찬바람이 분다 AI가 발전하여 신입을 안 뽑는다는 등.. 부정적인 소식들을 계속 들어왔기에 겁이 났지만 만들어온 작품도 많았고 결정적으로 여름에 열렸던 펄어비스 인턴십에도 서류가 합격했기에 어느정도 경쟁력이 있겠구나라는 안일한 생각을 하고 4학년 1학기가 끝난 뒤 이력서 난사를 시작합니다. 하지만 결과는 귀하의 재능은 ..
C++ 서적을 보던 중 이러한 코드를 보았다.std::mutex Mtx;std::condition_variable Cv;void Print(int Id){ std::unique_lock Umtx(Mtx); Cv.wait(Umtx); std::cout unique_lock 래퍼 클래스는 스마트 포인터처럼 스코프를 벗어날 때 소멸자에서 자동적으로 unlock을 해준다.조건 변수의 wait() 함수는 뮤텍스(unique_lock)를 받아 앞에서 설정한 뮤텍스의 잠금을 해제시키고 조건 변수를 통해 신호가 들어오기까지 대기하는 기능을 제공한다. 여기서 궁금한 점은 wait() 함수를 통해 이미 unlock 된 뮤텍스를 unique_lock 래퍼 클래스가 스코프를 벗어날 때 한번 더 unlock을 하나?그럼 하게 ..
#include #include //정렬template void Sort(T first, T last, U compare){ for (auto i = first; i != last; ++i) { for (auto j = i; j != last; ++j) { if (compare(*i, *j)) { auto temp = *i; *i = *j; *j = temp; } } }}//유니크template T unique(T first, T last){ if (first == last) // 빈 범위인 경우 return last; T result = first; while (first != last) { if (*first == *result) ++first; else { ..
#pragma once#include /* 일반 생성 방법 UniquePtr Ptr = UniquePtr(new T()); Make 팩토리 함수 UniquePtr Ptr = Make_Functions(value of T);*/namespace KKJ{ template class UniquePtr { public: explicit UniquePtr(T* InPtr = nullptr) : PrimitivePtr(InPtr) {} // 복사 방지 UniquePtr(const UniquePtr&) = delete; UniquePtr& operator=(const UniquePtr&) = delete; // 이동 생성자 UniquePtr(const UniquePtr&& Rhs) noexcept : P..
#include #include using namespace std;#define LOG(Str, Number) cout 해당 프로그램의 출력 결과는 어떻게 나올지 고민해보자. 고민 다 하셨나요? 출력 결과는 다음과 같다. 고민한 부분과 비슷할 수도, 아닐 수도 있는데 그 이유는 컴파일러가 똑똑해서다.NRVOFunc() 함수를 호출했을 때 동작 순서는 다음과 같을 것이다.NRVOFunc 함수 내에서 지역 변수 Test t 선언으로 일반 생성자 호출리턴값을 위해 t 객체를 이용한 복사 생성t 객체의 소멸자 호출Test t = RVOFunc() 에서 RVOFunc() 의 자리는 복사 생성으로 리턴된 객체가 있음Test t 는 복사 생성으로 리턴된 객체를 복사 생성리턴된 객체의 소멸자 호출즉 일반 생성자 ..
Uniform Initialization균일 초기화 : 객체의 형태에 상관 없이 중괄호 {} 를 사용해서 초기화 하는 것struct Point{ int x, y;};class Rational{public: Rational(int n, int d) : numerator(n), denominator(d) {}private: int numerator, denominator;};int main(){ int n = { 0 }; int m[2] = { 1, 2 }; Point p = { 1,2 }; Rational r = { 1,2 };/* 같은 표현 int n{ 0 }; int m[2]{ 1, 2 }; Point p{ 1,2 }; Rational r{ 1,2 }; */ //암시적 타입 변환들을 허용하지 않는다...
어렸을 적 했던 게임들은 왜 아직도 재밌었다고 느낄까?어렸을 적 했던 잠깐의 쉬는 시간동안 친구들과 나누는 대화, 몰래 먹던 불량식품 등 어렸을 적 했던 것들은 몽글몽글한 기억으로 남아있다. 지금 불량식품을 먹으면, 어렸을 적 했던 게임을 하면, 나는 거기서 어렸을 적의 행복을 똑같이 느낄 수 있을까? 아니다. 왜 이런 차이가 나는 것일까생각해보면 어렸을 적은 모든 것이 통제된 상황이다. 잠깐의 쉬는 시간도 1시간 중 10분으로 정해져 있고, 몰래 먹던 불량식품도 부모님의 용돈을 야금야금 모아서 사먹었을 것이다. 심지어 게임은 내 위의 3명과 부모님의 눈을 피해서 해야했다. 못하던걸 하게 되었을 때 재밌다. 다시 말해 억압되어 있는 것을 해방했을 때 행복함을 느낀다. 이렇게 정리할 수 있을까
함수 호출 규약 ( Calling Convention ) 이란, 함수를 호출하는 방식에 대한 약속이다.함수를 호출하는데 뭘 약속까지 하냐? 라고 생각할 수도 있지만 함수 호출에는 꽤나 많은 일들이 일어난다.기본적인 레지스터 stack frame 등은 설명하지 않고 넘어가겠다. 함수 호출 규약으로 정하는건 다음과 같다.인자 전달 순서인자 전달 방법Stack Frame을 정리하는 방법 먼저 함수 호출 규약을 보기 전에 함수가 호출되면 컴퓨터에선 어떤 일이 벌어지는지 확인해보자.함수 호출 시 다음과 같은 일이 일어난다.call 명령어 실행push ip + jump [함수의 주소]atomic 명령어로 한 클락에 실행됨함수 프롤로그해당 함수의 stack frame을 만드는 일push ebp → mov ebp, e..
0. 소스 코드 작성 ( Source Code )C++로 소스 코드를 작성했다고 가정ex) main.c 1. 전처리 ( Preprocessing )컴파일러가 코드를 해석하기 전에 전처리기 ( preprocessor ) 가 동작하여 #include, #define 같은 지시문을 처리한다.#include 해당 헤더파일이 실제 코드로 변환됨.그 후 .i 파일이 생성됨.ex) main.c → main.i 2. 컴파일 ( Compilation )전처리된 .i 파일이 컴파일러를 통해 중간 언어인 어셈블리어로 변환됨.ex) main.i → main.s 3. 어셈블 ( Assembly )컴파일러가 생성한 중간 언(어셈블리 코드)를 어셈블러 ( Assembler ) 가 변환하여 바이너리 형태의 오브젝트 파일을 생성한다...
0. 이진 탐색 트리이진탐색트리란 이진탐색(binary search)과 연결리스트(linked list)를 결합한 자료구조의 일종이다. 이진탐색의 효율적인 탐색 능력을 유지하면서도, 빈번한 자료 입력과 삭제를 가능하게끔 고안됐다. 1. BST 기본 연산별 시간복잡도연산 평균 시간복잡도 최악 시간복잡도 (Skewed Tree)탐색 (Search)O(log N)O(N)삽입 (Insert)O(log N)O(N)삭제 (Delete)O(log N)O(N) 2. 시간 복잡도 분석1) 평균적인 경우 (Balanced BST) → O(log N)트리가 균형 잡힌 경우 (Balanced Tree), 즉 거의 완전 이진 트리라면:트리의 높이(h)는 O(log N)탐색, 삽입, 삭제 연산 모두 최대 log N 번만 비교하..