728x90
반응형

개발 39

[C++] R Value 참조와 Move Semantics

오늘 알아볼 내용은 R Value 참조(R Value Reference)와 Move Semantic이다. 우선 간단히 L Value와 R Value가 무엇인지 살펴보면 다음과 같다. LValue : 단일식 이후에도 없어지지 않고 지속되는 객체 ex) 변수 RValue : 표현식이 종료된 후 더 이상 존재하지 않는 임시적인 값 ex) 상수, 함수의 반환 값 말로 하면 역시 이해가 안간다. 코드로 쳐 보는게 가장 좋은 방법이다. 자 에러가 뜨는 곳을 잘 확인해보자. 우선, &연산자는 L Value Reference이므로, 다음(++x)과 같이 썼을 때 컴파일 에러가 난다. 그 이유는, x++는 L Value가 아니라, R Value이기 때문이다. 왜 R Value인가? x++의 경우는 x가 증가되기 전의 복..

개발/Modern C++ 2021.09.11

[Unity] 코루틴 (Coroutine)

오늘 알아볼 것은 코루틴이다. 코루틴의 사전적 의미는 무엇인가? - 코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 togather를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이라고 생각한다. 어떠한 코루틴이 발동될 때마다 해당 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을..

개발/Unity 2021.08.29

[Algorithm] Red Black Tree - 1

오늘 알아볼 것은 레드블랙트리의 간단한 개념이다. 레드블랙트리는 STL map 자료구조에 사용되는 자료구조이고, 자동으로 균형을 잡아주는 트리이다. 균형을 잡는 것이 왜 중요할까? 라는 질문에 대해 그림을 하나 그려보겠다. 다음과 같은 이진트리가 있다고 가정해보자. 내가 찾고자 하는 값은 5이다. 위의 트리는 균형이 잡혀있지 않은 트리이기 때문에, 5까지 접근하기 위해서는 3번의 이동이 필요하다. 하지만, 균형잡힌 트리의 경우 어떻게 되는지 살펴보자. 다음과 같은 트리의 경우 어떤 경우에도 3번의 이동까지 하지 않고 모든 원소에 접근할 수 있다. 이처럼, 균형 잡힌 트리는 알고리즘의 성능에 큰 도움을 준다. 위의 설명을 좀 더 깔끔하게 하자면, 이진탐색트리의 경우 저장 또는 탐색에 평균적으로 O(logN..

개발/Algorithm 2021.08.23

[C++] Priority Queue - 우선순위 큐

오늘 공부해 볼 자료구조는 우선순위 큐이다. 우선순위 큐는 어디서 사용되는가? - 시뮬레이션 시스템 - 네트워크 트래픽 제어 - 운영체제에서의 작업 스케쥴링 - 수치 해석적 계산 우선 큐(Queue)라는 자료구조는 FIFO(First In First Out) 구조로 먼저 들어온 데이터가 먼저 나오는 구조이다. 이와 달리 우선순위 큐는 들어간 순서와 상관없이 우선순위가 높은 데이터가 먼저 나오는 것을 말한다. 보통 우선순위 큐는 힙(Heap)으로 구현된다. 힙(Heap) - 완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조 - 여러 개의 값들 중에 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조 - 힙은 중복 값을 허용함.' 힙의 종류 - 최대 힙 : 부모 노드의 키 값이 자식 노드보..

개발/Modern C++ 2021.08.19

[C++] Iterator

오늘 알아볼 것은 Iterator(반복자)다. 반복자란? - 컨테이너의 요소를 가리키는 포인터라고 할 수 있다. 간단한 예로 list를 한번 보자. 나는 int형 리스트 l을 선언하고, l에 1,2,3을 차례대로 삽입했다. 그리고, iter에 l의 맨 처음 요소를 삽입해주었고, 이 iter은 결국 1이라는 값을 출력할 것이다. 이런 식으로 반복자를 간단하게 생각하면 그냥 컨테이너의 요소를 가리키는 포인터라고 생각할 수 있다. 여기서 iter에 1을 더하면 그 다음 인자인 2로 넘어간다. 반복자 설명 생성되는 방식 읽기 접근 쓰기 증감 비교 입력 반복자 (Input Iterator) 읽기만 가능, 순방향 이동 istream_iterator =*p -> ++ == != 출력 반복자 (Output Iterat..

개발/Modern C++ 2021.08.16

[C++] 상속

오늘 알아볼 것은 상속 개념이다. 사실 C++기초를 공부했던게 워낙 옛날이라서 프로젝트를 진행하면서 상속에 대한 개념이 조금 부족했다. 그래서 다시한번 상기시켜보자는 의미로 정리를 한번 해보려고 한다. 상속이란? - 한 클래스가 다른 클래스에서 정의된 속성(변수, 함수)를 이어받아 사용 - 이미 정의된 클래스를 바탕으로 필요한 기능을 추가하여 정의 라고 단순하게 말할 수 있다. 상속의 장점? - 중복된 코드를 부모에서 구현하여 중복을 제거할 수 있다. - 상속을 통해 자식 클래스에서 부모가 가지고 있지 않은 기능을 구현할 수 있다. - 다형성을 활용한 객체 지향적 디자인 다형성이란? - 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함. 이 다형성이라는게 사실 처음에 C++을 공부하면서 도대체 ..

개발/Modern C++ 2021.08.15

[Algorithm] A Star

오늘 포스팅 주제는 A Star 알고리즘이다. // 11.21 추가 내용 정보과학 분야에 있어서, A* 알고리즘(A* algorithm 에이 스타 알고리즘[*])은 주어진 출발 꼭짓점에서부터 목표 꼭짓점까지 가는 최단 경로를 찾아내는(다시 말해 주어진 목표 꼭짓점까지 가는 최단 경로임을 판단할 수 있는 테스트를 통과하는) 그래프 탐색 알고리즘 중 하나이다. 이 알고리즘은 다익스트라 알고리즘과 유사하나 차이점은 각 꼭짓점에 대해 그 꼭짓점을 통과하는 최상의 경로를 추정하는 순위값인 "휴리스틱 추정값 "을 매기는 방법을 이용한다는 것이다. 이 알고리즘은 이 휴리스틱 추정값의 순서로 꼭짓점을 방문한다. 그러므로 A* 알고리즘을 너비 우선 탐색의 한 예로 분류할 수 있다. 이 알고리즘은 1968년 피터 하트, ..

개발/Algorithm 2021.08.15

[WinAPI] 2D 게임 현황 <완성>

2021.07.25 ~ 2021.08.14 드디어 끝났다. 사실 크게 달라진 것은 없다. 충돌처리, 엔딩씬, 포털, UI와 같은 짜잘한 것들을 모두 구현하고 이제 끝이 났다. 3일간 휴일이니 정리를 열심히해서 마무리 짓고, 이제 언리얼 프로젝트를 해볼 생각이다. 완성! 유튜브에 올린 포트폴리오 동영상이다. 편집프로그램 너무 비싸요.. 나는 체험판을 사용했다. 나름 재미있었다. 진짜.. STL이랑 Modern C++을 안쓰다가 써보니 까먹었던 것도 생각나게 되었고, 이 프로젝트를 통해 좀 더 자신감을 얻을 수 있었다. 앞으로 정리해야 할 사항에 대해 다시 한번 상기해보자. 1. A Star Algorithm의 원리 및 구현 2. 상속과 Overriding 3. Iterator 3가지는 3일동안 무조건 포스..

개발/WinAPI 2021.08.14

[WinAPI] 2D 게임 현황 <3주차>

이제 조금만 더 하면 될거같다.. 끝이 보인다. 이번 주 개발 진행 상황은 이렇다. 우선, 지난주에 unique_ptr에 대해 leak이 발생하는 부분에서 왜 발생하는지 확인하였고, 결과적으로 상속 객체가 유일성을 지키지 못하기 때문이라는 것을 알게 되었다. 그러므로, 이를 해결하기 위해서는 소멸자에 virtual을 붙여주거나, unique_ptr이 아닌 shared_ptr을 사용하면 된다. 하지만, virtual을 사용하는 것이 좀 더 나을 것이라 생각하여 나는 virtual을 사용하여 해결하였다. 그래서 이제 memory leak문제는 완벽하게 해결하였다. 그럼 이제 다음번에는 virtual 에 대해 다시 공부해봐야겠다. 뭐 가상소멸자쓴거긴 한데,, 정확히 모르겠슴.. ㅠ 그리고, A Star 알고리..

개발/WinAPI 2021.08.08

[WinAPI] 2D 게임 현황 <2주차>

안타깝게도 이번주에 여러 일이 있어서 진행을 많이 하지는 못했다. 하지만, 핵심적인 알고리즘인 A*알고리즘을 공부할 수 있었다. 하지만, A*의 경로 탐색을 실시간으로 하기에는 약간 무리가 있을 것 같다. 그래서 나는 현재 프로젝트를 디펜스게임으로 바꾸어 보려고 한다. 목적지인 집이 있고, 슬라임은 집을 공격해서 부술 수 있다. 부서지면 게임은 끝나게 되고, 플레이어는 나오는 슬라임을 제거하여 집을 지키면 되는 간단한 게임을 만들어보려고 한다. 우선 이번주 진행 사항에 대하여 살펴보자. 1. A* 알고리즘 A*의 경우 좀 보완하고 싶은 부분이 있어 자잘한 부분들을 모두 구현하고 나면 다시 보완할 생각이고, 따로 포스팅 할 생각이다. 현재 몬스터는 플레이어의 위치까지 최단경로로 이동한다. 이 때 맵을 바꿔..

개발/WinAPI 2021.08.01
728x90
반응형