본문 바로가기

전체 글

(55)
수학 - 일본 올림피아드 문제 이번에는 조금 가볍게 숫자에 관한 이야기를 정리해보려 합니다.보통 수학이라고 하면 공식이나 문제 풀이가 먼저 떠오르지만 가끔은 계산을 하다 우연히 마주친 숫자 하나가생각보다 재미있는 구조를 가지고 있는 경우도 있습니다.최근에 보게 된 유튜브 속 262144라는 숫자가 그랬습니다.https://www.youtube.com/shorts/_koxLp_Nsq8 262144는 단순히 2의 거듭제곱인 숫자입니다.2^18 = 262144그런데 이 숫자는 조금 재미있는 성질을 하나 가지고 있습니다.자기 자신의 자릿수 2, 6, 2, 1, 4, 4를 그대로 지수로 쌓고마지막에 루트를 씌우면 다시 자기 자신이 됩니다.처음 보면 굉장히 복잡해 보이지만 위에서부터 차근히 계산해보면 구조가 자연스럽게 정리됩니다.4의 4제곱은 ..
게임 AI 시스템 – FSM과 Behavior Tree 3개월간의 회사생활로 인해 그동안 블로그 작성이 어려워 공부내용을 공유하지 못한점 사과드립니다.그 안에서 신입으로써 기술적, 사회적으로 많은것들을 배우며 그 중에서도 중요하지만 고려하지 않았던 부분들과더 파고들 부분들에 대한 많은 배움이 있었습니다.그중 하나인 FSM과 BT에 대한 내용을 오늘 정리해보려 합니다.학생시절 처음 사용해본 FSM과 회사에서 집중적으로 작업한 BT를 돌아보며 정리하려고 합니다. FSM은 Finite State Machine 으로 유한상태기계라고도 부릅니다.이름만 들었을 땐 상당히 복잡해 보이지만 단순하게 이야기 하면 한정된 상태를 변경하는 기계입니다.예시를 들자면 공격, 이동, 대기 상태를 가진 NPC가 있다고 가정하겠습니다.평소엔 대기하다가 PC를 발견하면 이동하고 가까이 접..
개발 프로세스 - 형상 관리 오늘 다룰 내용은 지난 퍼포스에 대한 글에 이어서 형상 관리란 무엇이고 왜 사용하는지 좀 더 자세히 다뤄보겠습니다.형상 관리란 개발 과정에서 사용하는 소스코드, 에셋 등 여러 개발 자료들을 저장하고 변경을 추적, 통제, 기록 하는 역할을 합니다.누가 어떤 파일을 언제 어떻게 왜 바꿨는지 기록하여 더 효율적이고 안정적인 협업이 가능합니다.또한 개별적으로 파일을 관리 할 수 있게 하여 수정을 제한 하는 등의 방식으로 해당 파일에 대한 안정성을 가질 수 있습니다.형상 관리 프로그램에는 다양한 종류가 있는데 대표적으로 퍼포스, Tortoise SVN, Git, 포크 등 여러가지 프로그램이 존재합니다.해당 프로그램들이 필수적으로 가져야 할 기능들은 버전 관리, 분기와 통합, 잠금과 충돌 관리 등이 존재합니다.변경..
프로그램 - 퍼포스 운이 좋게도 좋은 기회가 생겨 좋은 직장에서 일할 수 있게 되었습니다.근무를 하기 전, 당사가 퍼포스(Perforce) 라는 프로그램을 통해 버전과 파일을 관리한다는 것을 알게 되었고이에 대해 사전적으로 공부해보았습니다.저는 이전 프로젝트들에서 Tortoise SVN과 Git을 사용해왔습니다.협업 툴을 제대로 사용하지 못하면 버전 관리에서 문제가 생기거나 파일 수정 과정에서 충돌(conflict)이 발생합니다.이 문제를 해결하는 것은 상당히 피곤한 작업이고, 수정 후에도 파악하지 못했던 추가 문제가 생길 수 있기 때문에 애초에 충돌을 예방하는 것이 무엇보다 중요합니다.퍼포스는 기본적으로 중앙집중식 버전 관리 시스템입니다.모든 파일은 중앙 저장소(Depot)에 있으며, 개발자는 자신의 Workspace를 ..
언리얼 - CDO 이번에 다룰 내용은 언리얼에서 사용하는 시스템 방식인 CDO (Class Default Object) 입니다. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/objects-in-unreal-engine에픽 게임즈에서 제공하는 해당 문서를 참조하면 UCLASS 매크로는 언리얼 기반 타입을 설명하는 UCLASS 에 대한 레퍼런스를 UObject 에 제공합니다. 각 UCLASS 는 클래스 디폴트 오브젝트(Class Default Object, CDO) 라는 하나의 오브젝트를 유지합니다. CDO는 기본적으로 클래스 생성자에 의해 생성되고 이후에는 수정되지 않는 디폴트 '템플릿' 오브젝트입니다.라고 작성되어있습니다.여기서 핵심은 디폴트 템플릿 오브젝트 ..
언리얼 - 가비지 컬렉션 이번에 다룰 내용은 지난번에 다룬 가비지 컬렉션이 실제 엔진에서 어떻게 사용되는지 조금 더 자세하게 알아보겠습니다.언리얼은 C++을 사용하는 엔진으로 언어 자체적으로 가비지 컬렉션이 구현되어 있지 않습니다.이에 에픽 게임즈에서는 자체적으로 가비지 컬렉션을 구현해 두었습니다. C++의 기본적인 메모리 관리 방법만으로 관리하기엔 무수히 많은 객체들이 생성되고 삭제되는 게임 환경에서 실수의 여지가 많은 만큼 단순히 기본 할당 해제만을 사용하는것은 위험의 소지가 다분하고 에디터 또는 블루프린트와도 코드가 연계 되어야 하기 때문에 일관적인 메모리 관리가 필요하기 때문입니다. 이러한 문제들을 해결하기 위해 언리얼에서는 프로퍼티 시스템이라 불리는 리플렉션을 사용하는데이 내용에 대해서는 추후 다루도록 하겠습니다.대략적..
시스템 프로그래밍 - 가비지 컬렉션 최근 취업을 위해 이곳저곳 면접을 보면서 가장 자주 이야기한 가비지 컬렉션입니다.대략적으로 어떤 기능을 하는지는 이해하고 있었지만 심층적인 이해가 부족하다고 생각이 들어오늘의 주제로 가져왔습니다. Garbage Collection , GC 는 런타임 환경에서 메모리를 자동적으로 관리해주는 방식을 이야기합니다.프로그래머가 할당했지만 사용하지 않고 해제하지 않은 메모리를 자동적으로 해제해주어 메모리 관리를 용이하게 해줍니다.이 내용을 보면 무조건적으로 좋은 것처럼 느껴지지만 가비지 컬렉션은 실행 시 성능에 영향을 줄 수 있기 때문에, GC 발생 빈도와 시점을 최소화하고 조절하는 것이 중요합니다.가비지 컬렉션은 자동 메모리 관리라는 기능 자체를 의미하며,이 개념은 다양한 언어와 엔진에서 서로 다른 방식으로 구..
자료구조 - Trie 감사하게도 좋은 기회가 생겨 코딩 테스트 문제를 더 풀어보던 중 새로운 자료구조에 대해 공부하게 되었습니다.Trie 는 트라이라 읽는 prefix tree 라고도 부르는 자료구조로 트리의 일종입니다.일반적으로 문자열의 효율적인 비교를 위해 사용됩니다.트라이는 노드 하나 하나가 개별의 문자를 가지고 그 문자들을 트리의 형태로 따라가면 하나의 완성된 단어가 되는 방식의자료구조입니다.이런 방식으로 글자를 노드별로 다음 글자로 이어지고 마지막 노드에서 단어로 완성되었는지불값을 통해 확인해 단어의 완성을 확인합니다.트라이는 트리의 이점을 그대로 가지기 때문에 해당 단어를 접두어로 가지는 단어를 찾거나 혹은 이미 존재하는지찾는 것에 효율적입니다. 트라이는 해커스랭크에서 No Prefix Set 이라는 문제를 풀면서..