전체 글 74

[2025-06-21 / Day 75] 캐시 메모리, 인터럽트, 버스/메모리 계층 구조

CS 공부 중 컴퓨터 구조를 정리해보았습니다.오늘은 캐시 메모리, 인터럽트, 버스 구조, 메모리 계층 구조에 대한 개념을 정의, 이해(Why? Where? How?), 예시, 그림 순의 구조로 요약하겠습니다.위 개념이 왜 존재하는 지, 어디서 쓰이는 지에 대한 내용도 이해가 더 잘 되도록 넣었습니다. 정의, 이해(Why? Where? How?) , 예시, 그림 순의 구조로 요약하는 이유는 - 정의는 개념을 알기 위해- 이해(Why? Where? How?)는 개념을 다른 분들에게 잘 설명할 수 있을 정도가 되기 위해- 예시는 어디서 쓰이는지 더 구체적으로 알기 위해- 그림은 개념을 머릿속에 더 잘 남게 하기 위해서 그렇습니다.1. 캐시 메모리 캐시 메모리는 CPU와 RAM(주기억 장치) 사이의 속도 차이를..

컴퓨터 구조 2025.06.22

[2025-05-26 / Day 74] 몬스터의 공격이 다른 몬스터에 공격 판정이 되는 문제 해결

언리얼 최종 팀프로젝트를 하다가 AI 애니메이션을 맡게 되었습니다. 제가 언리얼로 만들 게임에는 몬스터가 나옵니다.몬스터가 하는 공격은 몬스터끼리는 공격이 안되고 오직 플레이어만 공격이 가능하도록 만들고 싶었습니다. 우선 몬스터의 공격 판정은 트레이스 방식으로 구현되었습니다. 언리얼 에디터에서 편집 >> 프로젝트 세팅 >> 엔진 >> 콜리전으로 들어가면.. 트레이스 채널을 확인할 수 있습니다.여기서, MonsterAttackTrace의 기본 반응을 Ignore, Overlap, Block 3개중에 고를 수 있습니다.위 사진을 보면 트레이스 채널 바로 아래 부분에 프리셋을 확인할 수 있는데 이것은 캐릭터 블루프린트에 들어갔을 때디테일 창의 콜리전 탭에 있는 콜리전 프리셋입니다.추가된 트레이스 채널은 그 ..

[2025-05-24 / Day 73] DP 기초

📌 1. DP(동적 계획법)란 무엇인가?DP(Dynamic programming)는 큰 문제를 풀기 위해 작은 문제로 나누고, 그 작은 문제의 답을 저장해두었다가 재활용해서 빠르게 푸는 알고리즘입니다. 반드시 아래 두 조건을 만족해야만 이 알고리즘을 쓰는 의미가 있습니다.최적 부분 구조(optimal substructure) : 큰 문제의 최적해가 작은 문제의 최적해로 구성됨중복 부분 문제(overlapping sub-problems) : 동일한 하위 문제를 여러 번 계산해야 하는 경우더 쉽게 풀어서 설명우리가 문제를 풀 때 똑같은 계산을 계속 반복하게 되는 경우가 있습니다.DP는 그런 "같은 계산을 다시 하지 않기 위해" 한 번 계산한 결과를 어딘가에 저장해놓고 그 값을 나중에 가져다 씁니다.그래서 ..

알고리즘 2025.05.24

[2025-05-03 / Day 71] 해시(Hash)와 힙(Heap) 핵심 정리

✅ 해시(Hash Table)일반적으로 "해시"라고 하면 이 해시 테이블을 줄여서 부르는 표현입니다.해시 테이블은 키-값 쌍을 저장하는 자료구조입니다.Key를 해시 함수에 넣어서 배열의 인덱스로 변환하고,그 위치에 데이터를 저장하거나 검색하는 방식으로 동작합니다. 이 구조 덕분에 탐색, 삽입, 삭제 모두 평균 O(1)의 시간복잡도를 가지며,연관 데이터 저장이나 키 기반 조회가 매우 빠르고 직관적입니다. C++ STL에서는 unordered_map이 대표적인 해시 기반 컨테이너입니다. 아래에서는 해시 테이블의 개념에 대한 추가 설명과 동작하는 원리에 대해 설명하겠습니다.해시 테이블에 데이터를 저장할 때, 저장을 하는 과정이 있습니다. 저장할 때는 먼저 해시 함수(hash function) 를 이용해 키(K..

자료구조 2025.05.03

[2025-05-03 / Day 70] STL - 스택(Stack)과 큐(Queue) 핵심 정리

✅ 스택(Stack)자료구조의 스택은 메모리에서 나오는 개념인 스택 영역(Stack)과는 다른 개념입니다. 스택은 자료구조 중 하나로, 가장 나중에 들어간 데이터가 가장 먼저 나오는 LIFO(Last In, First Out) 구조를가진 선형 구조입니다. 즉, 쌓는 방향과 꺼내는 방향이 같은 구조이며 "후입선출"이라는 특징을 갖고 있습니다.✅ 스택의 구조와 동작 방식스택은 보통 배열 또는 연결리스트를 이용해 구현됩니다.보통 배열의 끝부분(Top이라고 부름)에서만 데이터를 넣거나(push) 꺼내는(pop) 연산이 일어나는 구조입니다.[ ] → 빈 스택push(10) → [10] push(20) → [10, 20] push(30) → [10, 20, 30] pop() → [10, 20] // 3..

자료구조 2025.05.03

[2025-05-02 / Day 69] STL - 벡터(Vector)와 리스트(List) 핵심 정리

벡터벡터는 STL에서 제공하는 동적 배열 컨테이너입니다. 여기서 동적이란?런타임 중에 배열의 크기가 자동으로 늘어날 수 있다는 뜻입니다.그 기준은 크기를 초과하면 더 큰 새 배열의 크기로 만들고, 기존 데이터를 복사해서 옮긴 뒤 기존 배열은 삭제합니다.벡터의 특징메모리가 연속적이어서 데이터의 접근이 빠르고 캐시 효율이 높지만, 마지막 인덱스를 제외한 중간 삽입/삭제는 느립니다. 여기서 위 문장에 의문이 드는 점을 다 정리했습니다.메모리가 연속적이라는 것은 어떤 의미일까?메모리가 연속적이라는 말은, 데이터들이 메모리 상에서 줄줄이 한 줄로 이어져 있다는 뜻입니다.각 데이터들은 고유한 메모리 주소를 갖고 있습니다.예를 들어, int 자료형이 4바이트라 가정할 때 메모리 구조는 이런식으로 됩니다.[100번지]..

자료구조 2025.05.02

[2025-04-26 / Day 68] AI NPC에 감각 부여하기 - 2

C++ 코드는 강의 자료라 올리지 않았습니다.C++ 코드는 따로 노션에 분석하고 정리합니다. 내용이 짧습니다.이번에는 AI의 청각을 적용시켜 어떻게 플레이어와 상호작용하는지 강의를 보고 만들며 테스트 해보았다.AI NPC - 청각 구현을 위한 세팅세팅은 간단하게 비헤이비어 트리, 블랙보드에 관련된 것을 정리했다. 플레이어를 청각에 의해 쫒아가는 AI 실험

언리얼 AI 2025.04.26

[2025-04-26 / Day 67] AI NPC에 감각 부여하기 - 1

C++ 코드는 강의 자료라 올리지 않았습니다.감각을 부여하기 위한 Behavior Tree 만들기 열겨형을 만들었다. C++ 코드로 AI 컨트롤러에 블랙보드 키 값을 정의한 부분이 있는데 그 부분의 이름과 정확히 똑같게 설정을 해줬다. 참고로 C++코드에서 정의한 열거형의 순서랑 똑같아야 한다.블랙보드에서 그 열거형을 들고와서 설정할 수 있기 때문이다. 사실 C++ 코드로 이런부분이 다 설정되어 있다면 이렇게 C++과 에디터를 왔다갔다하며 설정할 필요는 없다.SearchState가 공백으로 있다하더라도 SearchState의 존재만 있으면 C++에서 코드를 작성해 이용할 수 있는 것이다.하지만 여기서는 런타임동안 SearchState에 키 값으로 들어가게 하는 로직을 써도에디터에서 미리 키 값을 설정하려..

언리얼 AI 2025.04.25

[2025-04-25 / Day 66] AI NPC에 행동 부여하기 #3

편의를 위해 Behavior Tree를 BT라고 했습니다.C++ 코드는 강의 자료라 올리지 않았습니다BP를 어떻게 만들어야 하는지, C++에서 리플렉션한 변수(속성)은 어떻게 설정하는지 이때까지 만든 AI의 동작들을 다 테스트하는 내용을 담았다.감정 상태와 관련된 BTService구현AI의 감정 상태가 달라지는 로직은 BTTask가 아닌 BTService를 구현하는 방식으로 배웠다.강사님이 BTTask 말고도 좀 더 다양한 기능을 써보라고 이렇게 가르쳐주신 듯하다. EnumEnum은 열겨형이다. 언리얼에서는 uint8 타입의 숫자로 인식되지만 사람들이 Enum이 어떤 모드인지 정의할 때 "Sad", "Worry" 그렇게 EEmotionalState를 만들었다. BTServiceBTService는 비헤이..

언리얼 AI 2025.04.25

[2025-04-24 / Day 65] AI NPC에 행동 부여하기 #2

비헤이비어 트리 설계학습 목표Behavior Tree 내에서 Task와 Service를 구성하여, AI NPC가 다양한 상황에 맞춰 행동할 수 있도록 구체적인 알고리즘을 설계하고 구현할 수 있다.기본 비헤이비어 트리 태스크(BTTask) 구현 및 시퀀스와 셀렉터 등의 복합 노드를 활용할 수 있다. C++ 코드의 경우 강의에서 제공된 것을 사용하였기에 개인 노션에만 기록하고 블로그에 올리지는 않았습니다.BTTask란 무엇일까?BPTask는 Behavior Tree에서 AI가 "행동"을 실제로 수행하게 만드는 블루프린트 노드이다. 상호작용할 수 있는 주변 오브젝트를 찾는 BTTask 구현BTTask_BlackboardBase를 상속받는 BTTask_FindInteractiveObject를 만들어주었다. ..

언리얼 AI 2025.04.24