쾌락없는 책임 (공부)
-
[Unreal] unreal callback by delegate - 언리얼 콜백 만들기쾌락없는 책임 (공부)/Unreal 2022. 8. 21. 22:11
서론 - 본론은 아래 코드에 유니티의 C#에서는 델리게이트가 애초에 언어 기본 내장이기도 하고 Action 등의 키워드도 있어서 콜백을 구현하는게 어렵지 않았습니다. 그런데 이 언리얼에서는 어떻게 이걸 구현해야할지 몰랐고 엔진에서 만든 델리게이트가 있음은 알고 있지만 이를 제대로 사용하는 방법을 몰랐습니다. 이 그래서 이 콜백에 삽질을 좀 하게 되었고 여러 사이트를 돌아다니면서 델리게이트를 통해서 콜백을 만드는 방법을 알아내 간단하게 코드만 공유하도록 하겠습니다. 추후 델리게이트와 관련한 이야기들을 많이 공부한다면 이와 관련해서도 글을 써 보겠습니다. 델리게이트로 콜백 만들기 NPC와의 대화 상황이 있고 Player는 대화중 멈추고 NPC를 바라봐야 합니다. 이후 대화가 끝나면 플레이어는 다시 움직일 수..
-
[C++] vector<bool> 보기를 돌같이 해라쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 16. 16:52
서론 현재 C++에 대한 깊이가 부족하다고 생각해 강제로 깊게 만들어주는 Effective 시리즈의 STL을 읽고 있습니다. 이 이펙티브 시리즈는 나온 지 좀 오래된 시리즈라 현재 C++과는 맞지 않는 이야기들이 몇 있지만 눈여겨볼만한, 아직 해당되는 이야기들이 대부분입니다. 이 중 현재 항목들을 1/3 정도 보면서 2번째로 흥미로웠던 부분인 vector에 관련한 이야기입니다. 현재 포스트의 제목도 Effective STL에서 가져온 만큼 여기서 다뤘던 이야기들을 잠깐 기록해보려고 합니다. vector은 일반 다른 컨테이너와는 사뭇 다르다 #include #include using namespace std; int main(){ vector v; v.push_back(true); v.push_back(f..
-
[C++] vector, deque 의 차이 - 메모리는 어떻게 관리할까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 14. 16:36
서론 vector에 대한 이야기는 많이 있습니다. 가장 많이 접하게 되는 컨테이너기도 하고 vector만 있으면 대부분의 상황에서 큰 문제가 없거든요. vector와 비슷한 deque는 뒤로만 넣는 vector와 다르게 push_front(), pop_front() 의 함수가 있어 앞, 뒤로 사용할 수 있다는 장점이 있는 컨테이너입니다. 뭐 이런 차이에 대해서는 누구나 알고 있는 부분이라고 생각됩니다. 그래서 오늘은 메모리 관점에서 vector와 deque는 어떻게 다른 방식을 취하는지 알아보도록 하겠습니다. vector는 재할당, deque는 쪼개져 있다 vector의 경우 메모리 내에서 연속적인 위치에 있는 방식을 취하고 있습니다. 만일 기존에 사용하던 용량이 가득찬 채로 원소를 추가적으로 삽입하면 ..
-
[C++] C++ sort는 어떤 알고리즘을 사용할까쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 13. 15:57
서론 '리스트는 어떤 정렬 알고리즘을 사용하나요?' 사실 algorithm 헤더에 있는 sort는 어떤 알고리즘을 사용하는가에 대한 이야기는 많이 있었습니다. 그런데 리스트의 경우 리스트 내부 함수로 sort 함수가 있으며 이 함수가 어떤 알고리즘을 채용하는지 알수 없었습니다. 때문에 여기저기 돌아다니면서 얻은 정보를 정리해서 작성해보려고 합니다. 혹시나 더 좋은 정보를 얻으신 분들이 있다면 꼭꼭 댓글로 알려주시면 감사하겠습니다 (_ _) 헤더에 있는 sort 함수 - 퀵소트, 인트로 소트 일단 vector 등에 사용할 수 있는 sort 함수의 경우 간단하게 자료들을 구할 수 있었습니다. 그리고 내린 결론은 '이전에는 퀵소트를 사용했지만 현재는 intro sort를 사용하고 있다!' 입니다. 일단 퀵소트..
-
[C++] C++ iterator, 반복자 - 1쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 13. 15:01
개요 평소 iterator를 사용하지 않고 살아오다가 반복자에 대한 부분이 많이 부족한거 같아 이참에 한번 정리를 해보기로 했습니다. 보면서 아주 중구난방의 이야기들이 오가니 참고용 자료가 되지는 못할 것 같습니다. C++에서 iterator 사용 기존 배열, vector의 경우 인덱스를 통한 랜덤 접근이 가능하기에 반복자에 대한 필요성이 강조되지 않습니다. 하지만 set, map 등의 자료구조는 구조가 vector와 다르죠. 때문에 이것들을 탐색하기 위해서 반복자가 사용되게 됩니다. 일단 가장 쉬운 예시인 std::vector에 대해서 보겠습니다. 일단 begin(), end() 함수가 있는 만큼 vector는 반복자를 제공해 줍니다. 일단 vector 에서는 4개의 iterator를 두고 있습니다. ..
-
[C++] shared_ptr 은 어떻게 동작하게 될까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 9. 20:19
서론 스마트 포인터를 공부하게 되면 unique_ptr을 먼저 본 뒤 shared_ptr, weak_ptr을 보게 됩니다. 그러면 각 스마트 포인터들이 어째서 등장하게 되었는지 쉽게 알 수 있기 때문이죠. 저 같은 경우에도 위와 같은 흐름으로 공부를 했습니다. 일단 개념적인 부분들을 전부 알아낸 뒤 아직 사용은 해보지 않아 사용 시 어떠한 문제들이 있는지는 아직 잘 모르는 상태입니다. 그런데 shared_ptr의 경우 어떤 식으로 reference count를 하는지 궁금하게 되어 알아보게 되었고, 이에 따라 정리되는 지식들을 이렇게 블로그에 쓰는 중입니다. shared_ptr과 weak_ptr을 간단히 보면 일단 기존 unique_ptr의 경우 객체에 대한 소유권을 한 포인터에서만 가질 수 있게 관리하..
-
[C++] C++의 move semantics (의미론적 이동?)쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 7. 15:22
개요 C++에서 move semantics는 소유권을 이전해 주는 것! 제가 듣던 C++ 강의에서 나왔던 이야기입니다. 이전에 syntax는 문법에 맞는가를 이야기하는 것이고 semantics의 경우 내부적인 의미를 이야기합니다. 이 내용은 스마트 포인터를 보게 되면서 더 많이 알아보게 되는데요. 일단 기본적인 RAII 패턴을 지킨 클래스를 보면서 짚어보겠습니다. 저도 잘 머릿속에 잘 정리가 안된 개념이라 짚어가면서 해야 할 것 같네요. RAII 패턴 + std::move로 보는 move란 #include #include using namespace std; template class RAII { public: T* pointer; RAII(T* _pointer) : pointer(_pointer) { ..
-
[C#] C# 에서 상호 참조는 어떻게 해결이 될까?쾌락없는 책임 (공부)/C# 짜잘이 2022. 8. 6. 15:03
개요 일단 C++의 unique_ptr을 보면 shared_ptr이 나오는 배경을 알 수 있습니다. 그리고 shared_ptr을 보게 되면 상호 참조 문제로 인해서 delete되지 않을 우려가 있기에 weak_ptr이 나오게 됩니다. 이런 이야기들은 포인터가 프로그래머에게 직접 보이는 C++의 이야기이고 포인터가 내부적으로 작동하고 밖에서는 볼 수 없는 C#과는 다른 이야기로 보이게 됩니다. C#에서 delete 작업은 전적으로 GC에게 위임하고 있으며 이 GC의 동작을 알아보면 항상 '자동으로 쓰이지 않는 객체를 비할당' 해준다고 되어 있습니다. 그렇다면 C++의 shared_ptr에서 나오는 문제인 상호 참조 문제는 C#에서 어떻게 해결하고 있을까요? C# GC는 mark and sweep 방식이다 ..