전체 글 459

가비지 컬렉션

가비지 컬렉션이란? 가비지 컬렉션은 메모리 관리 기법 중 하나로 프로그래밍을 하다 보면 동적으로 할당해준 메모리에 대한 지속된 관리가 필요합니다. 컴퓨터는 일정한 메모리 용량을 가지고 있고, 정해진 메모리를 초과하게 되면 동작하는 프로그램이 정상적으로 작동하지 않을 수 있습니다. 때문에 가비지 컬렉터를 통해서 프로그램이 동적으로 할당했던 메모리 영역 중에서 더 이상 쓰이지 않고 필요 없는 영역을 해제하는 것을 말합니다. C++에서는 수동 메모리 관리를 가정하고 설계하였으나, 언리얼에서는 가비지 컬렉션을 통해서 프로그래머가 관리해야 할 메모리 영역이 줄어듭니다. 가비지 컬렉션의 장단점 장점의 첫 번째로는 유효하지 않은 포인터의 접근을 막을 수 있습니다. 유효하지 않은 포인터의 접근을 막지 않으면 만약 이 ..

UE5 2024.01.26

유클리드 공간

유클리드 공간 (유클리드 기하학 Euclidean Geometry)란? 유클리드가 연구했던 평면과 공간을 일반화한 것을 말한다. 유클리드 기하학은 공간에서의 거리, 각도 등을 다루는 수학 분야이다. 이 일반화는 유클리드가 생각했던 거리와 길이와 각도, 좌표계를 도입하여, 임의차원의 공간으로 확장한 것을 말한다. 이는 표준적인 유한 차원, 실수, 내적 공간이다. 유클리드 공간은 수하학적 모델링, 물리학, 컴퓨터 그래픽스 등의 다양한 분야에서 사용된다. 유클리드 벡터 또는 벡터는 특수한 경우로, 유클리드 공간에서의 크기와 방향을 모두 포함하는 기하학적 대상이다. 피타고라스 정리와 비슷한 개념이며, 실제 거리를 구할 때에도 사용하지만, 인공지능 등 다양한 분야에서 유사도를 판단할 때 사용된다. 피카고라스 정리..

레이캐스트와 트레이스

레이캐스트와 트레이스는 같은 작업을 뜻한다. 게임에서 플레이어 캐릭터가 무언가를 바라보고 있는지 확인하여 그런 경우 게임을 어떤 상태로 변경하고자 (예를 들어 플레이어가 무언가를 바라보면 강조시키고자)하는 경우가 있다. 또는 적이 플레이어 캐릭터를 볼 수 있는지 확인하여 그런 경우 어떤 식으로든 발사 또는 교전을 시작시켰으면 하는 경우가 있다. 이러한 두 가지 모두 레이캐스트 또는 트레이스를 통해 보이지 않는 광선을 "발사"하여 두 점 사이에 걸리는 지오메트리가 있는지 확인하고, 걸리는 지오메트리가 있으면 어떤 작업을 할 수 있도록 반환한다. 트레이스 실행 시 사용할 수 있는 옵션은 여러가지가 있다. 트레이스를 실행하여 오브젝트와 콜리전 검사를 한 뒤 히트한 오브젝트를 반환하거나, Trace Channe..

UE5 2024.01.11

해시 테이블과 블룸 필터 (2) - 해시 테이블에서 충돌 체이닝

앞선 게시글에서 해시 테이블을 이용하여 필요한 키를 저장하고 검색하는 방법에 대해 알아보았다.그러나 다수의 키가 같은 해시 값을 갖는 충돌 문제가 발생한다는 점도 배웠다.이전 예시에서는 같은 해시 값을 갖는 키에 대해서는기존 키를 덮어써서 가장 최근에 추가된 키만 유지되도록 했었다.그러나 이 방식은 다수의 키글 저장할 수 없는 문제가 있다.그러므로 이러한 문제를 해결하고해시 테이블에 모든 키를 저장할 수 잇는 몇 가지 방법에 대해 알아보자.  해시 테이블에서 충돌 해결 방법1. 체이닝 2. 열린 주소 지정 2-1 .선형 탐색 2-2. 이차함수 탐색3. 뻐구기 해싱   체이닝앞에서는 하나의 해시 값에 대해 하나의 원소만을 저장했다.그래서 특정 해시 값 위치에 이미 원소가 존재한다면새로운 값과 예전 값 중 ..

프로퍼티, 델리게이트, 이벤트 간단 정리

프로퍼티 프로퍼티(property)란 클래스의 private 필드를 형식적으로 다루는 일종의 메소드로 간주할 수 있다. 즉, 클래스의 private 필드는 정보 은닉(information hiding)을 위해 다른 클래스에서는 임의로 접근이 허용되지 않지만 대응되는 여러 프로퍼티를 통하여 다른 클래스에서 형식적으로 접근할 수 있는 방법이 제공되는 것이다. 일반적으로 하나의 프로퍼티는 값을 지정하는 셋-접근자(set-accessor)와 값을 참조하는 겟-접근자(get-accessor)로 구성된다. 프로퍼티는 마치 필드처럼 참조할 수 있으며 배정문의 왼쪽에서 사용하면 셋 - 접근자가 호출되고 배정문의 오른쪽에서 사용되면 겟 - 접근자가 호출된다. using System; class PropertyClass{..

해시 테이블과 블룸 필터 (1) - 해시 테이블이란

해시 테이블과 블룸 필터를 알면 좋은 이유 대용량 데이터를 다루는 응용 프로그램에서 발생할 수 있는 룩업 관련 문제에 대해 이해할 수 있다. 주어진 문제에 대해 결정적 룩업 솔루션이 적합한지, 또는 비결정적 룩업 솔루션이 적합한지를 구분할 수 있다. 시나리오에 근거한 효율적인 룩업 솔루션을 구현할 수 있다. C++ STL에서 제공되는 일반적인 솔루션을 구현할 수 있다. 룩업은 특정 원소가 컨테이너에 있는지 확인하거나 또는 컨테이너에서 특정 키에 해당하는 값을 찾는 작업을 의미한다. 데이터 베이스 시스템이나 병원 관리 시스템에 저장된 방대한 자료 중에서 원하는 자료를 찾아 가져오는 작업과 같은 사례에 훨씬 빠르게 수행할 수 있는 효과적인 알고리즘이 필요할 때가 있는데, 해시 테이블과 블룸 필터라는 두 가지..

멀티플레이어의 기본 -데디케이트 서버와 리슨 서버

멀티플레이어의 이해 게임을 하면서 '멀티플레이어'라는 용어를 많이 들어봤을 것이다. 이 용어가 개발자에게는 어떤 의미냐 하면, 실제로 멀티플레이어를 구현하기 위해서는 서버와 서버에 연결된 클라이언트 사이의 네트워크를 통해 전송되는 일련의 명령을 의미한다. 이를 통해 구현해내면, 개발자는 플레이어에게 다른 플레이어들과 세계를 공유하는 경험을 제공할 수 있다. 서버와 클라이언트 사이의 이러한 양방향 통신의 한 예로는 플레이어가 게임 중에 무기를 발사하려고 시도하는 시점을 들 수 있다. 플레이어가 마우스 왼쩍 버튼을 누르고 있으면, 클라이언트가 서버에 무기 발사를 원한다는 의사를 전달한다. 서버는 다음 항목을 확인해 플레이어가 무기를 발사할 수 있는지 확인한다. 플레이어가 살아 있는가? 플레이어가 무기를 장착..

UE5 2024.01.01