2026/05 9

[CS] 프로세스 간 통신 방법과 Race Condition

이전에 프로세스와 스레드의 차이를 정리하면서,프로세스는 서로 독립적인 메모리 공간을 가지고스레드는 같은 프로세스 안에서 메모리를 공유한다는 것을 알게 되었다.그렇다면 독립적인 메모리 공간을 가진 프로세스들은 서로 어떻게 데이터를 주고받을 수 있을까?또 여러 스레드나 프로세스가 같은 자원에 접근하면 어떤 문제가 생길 수 있을까?이번 글에서는 이러한 궁금증을 해결해보려고 한다.프로세스의 메모리 구조 간단 정리프로세스는 서로 독립된 가상 주소 공간을 가진다.예를 들어 A 프로세스와 B 프로세스가 있다고 했을 때,A 프로세스의 0x1000 주소와 B 프로세스의 0x1000 주소는같은 주소처럼 보여도 실제로는 서로 다른 물리 메모리를 가리킬 수 있다.프로세스가 사용하는 가상 주소는MMU(Memory Managem..

C++, CS 2026.05.14

[언리얼 엔진] 팀 프로젝트 제작 일기 03 - 변경된 방 구조에 맞춰 Room Flow 수정하기

이번에는 팀 프로젝트의 방 구조 기획이 변경되면서, 기존에 구현해두었던 Room Flow를 수정한 내용을 정리해보려고 한다.기존에는 SafeRoom을 시작 지점처럼 사용하고, 각 방이 NextRooms 배열을 통해 다음 방과 연결되는 구조였다.다시 말해, 방을 클리어하고 연결된 다음 방으로 진행하는 방식이었다.하지만 기획이 변경되면서 게임 구조가 StartRoom을 중심으로 바뀌었다.이제는 한 층 안에 StartRoom이 있고, 그 주변에 CombatRoom, RandomRoom이 배치된다.플레이어는 StartRoom에서 출발해 주변 방들을 클리어하고, CombatRoom 클리어 횟수 조건을 만족하면다시 StartRoom에 생성된 포탈을 통해 다음 층으로 이동한다.변경된 방 구조기존 구조는 시작 지점에서..

[CS] 프로세스와 스레드의 차이, Context Switching 정리

오늘은 프로세스와 스레드의 차이, 그리고 컨텍스트 스위칭에 대해 정리해보려고 한다.멀티스레드 프로그래밍을 공부하다 보면 스레드, 멀티스레드 환경, 동기화 같은 용어를 자주 보게 된다.나도 이전에 멀티스레드 프로그래밍을 해본 적이 있어서스레드가 여러 실행 흐름을 다루는 개념이라는 정도는 알고 있었다.하지만 막상 “프로세스와 스레드의 차이가 무엇인가?”라고 물어보면 명확하게 설명하기는 어려웠다.그래서 이번에는 프로세스와 스레드가 각각 무엇인지,둘은 메모리와 자원 관리 측면에서 어떤 차이가 있는지 정리해보았다.그리고 여기서 더 나아가 운영체제가 여러 실행 흐름을 어떻게 전환하는지 이해하기 위해컨텍스트 스위칭, PCB, TCB 같은 개념도 함께 정리해보려고 한다.프로세스란?프로세스는 운영체제로부터 자원을 할당받..

C++, CS 2026.05.12

[언리얼 엔진] 팀 프로젝트 제작 일기 02 - StatComponent로 전투 스탯 관리하기

어제는 ActorComponent를 상속받는 HealthManager 클래스를 만들어서 체력 관리와 UI 갱신을 분리하는 실습을 해보았다.이번에는 그 구조를 팀 프로젝트에 맞게 응용해서 StatComponent를 구현했다.처음에는 체력, 공격력, 방어력, 이동속도, 스태미너를 각각 변수로 관리하는 기본 형태로 작성했다.이 버전이 처음 커밋했던 StatComponent의 초기 완성 상태였다.하지만 이후 유물과 강화 시스템을 반영해야 했고, 단순히 스탯 값을 변수로만 관리하는 방식으로는공격력 증가, 최대 체력 증가, 이동속도 배율 증가 같은 효과를 처리하기 어렵다고 느꼈다.그래서 이후에는 전투 스탯을 구조체로 분리하고, 기본 스탯과 최종 스탯을 나누어 관리하는 방식으로 확장했다.StatComponent를 만..

[언리얼 엔진] 액터 컴포넌트로 체력 시스템 분리하기

이번에는 언리얼 엔진의 Actor Component에 대해 알아보려고 한다.액터 컴포넌트가 무엇인지, 왜 필요한지 정리하고,실제로 체력 시스템을 액터 컴포넌트로 분리했던 예시를 함께 살펴보려고 한다.Actor Component란?언리얼 엔진에서 게임 월드에 존재하는 기본 단위는 Actor이다.예를 들면 플레이어, 적, 아이템, 문, 투사체, 방 같은 오브젝트들이 모두 Actor가 될 수 있다.그런데 하나의 Actor가 모든 기능을 직접 가지고 있으면 클래스가 점점 커진다.예를 들어 플레이어 클래스가 아래 기능을 전부 직접 가진다고 생각해보면,class APlayerCharacter{ // 이동 // 공격 // 체력 // 데미지 처리 // 사망 처리 // UI 갱신 /..

언리얼 엔진 2026.05.10

[언리얼 엔진] 팀 프로젝트 제작 일기 01 - Game Flow 와 Room 시스템 구현

이번 팀 프로젝트에서 나는 Game Flow와 전투 시스템을 담당했다.먼저 전체적인 게임 진행 흐름을 잡아야 전투 시스템도 자연스럽게 연결할 수 있다고 생각했다.그래서 메인메뉴, 인게임, 결과창으로 이어지는 Game Flow를 먼저 구현하고,인게임 내부에서는 방 단위로 진행되는 구조를 만들었다.내가 작성한 코드에서GameMode는 게임의 규칙, 전체적인 게임 관리를 담당하고,GameState는 UI나 플레이어에게 알려야 하는 정보들을 관리한다.각각의 Room은 별도의 동작을 수행하고, GameMode, GameState 를 연동하여 전체적인 흐름을 관리했다.RoomBase이번 프로젝트는 플레이어가 전투방, 보물방 같은 특정 방에 진입하여 게임을 진행하는 형태이다.따라서 모든 방의 공통 부모 역할을 하는 ..

[C++] std::find와 std::binary_search 차이 정리

오늘은 STL 알고리즘 중 std::find와 std::binary_search의 차이를 정리해보려고 한다.두 함수는 모두 특정 값을 찾을 때 사용할 수 있지만 탐색 방식, 반환값, 사용 조건이 다르다.처음에는 둘 다 단순히 값을 찾는 함수라고 생각했는데,std::find는 순차 탐색이고 std::binary_search는 이진 탐색이라는 점에서 큰 차이가 있었다.또한 std::binary_search는 정렬된 범위에서만 올바르게 사용할 수 있고,컨테이너의 iterator 종류에 따라 실제 시간 복잡도가 달라질 수 있다는 점도 중요했다.std::findstd::find는 범위 안에서 원하는 값을 순차 탐색으로 찾는 알고리즘이다.즉, 처음 원소부터 마지막 원소까지 하나씩 비교하면서 값을 찾는다.#inclu..

C++, CS 2026.05.06

[C++] STL 컨테이너 정리

이전 글에서 vector와 list, map과 unordered_map의 차이를 각각 정리해보았다.이번 글에서는 개별 컨테이너의 세부 구현보다는STL 컨테이너가 전체적으로 어떻게 분류되는지,그리고 반복자 기준으로 어떤 차이가 있는지 정리해보려고 한다.STL 컨테이너란?STL 컨테이너는 데이터를 효율적으로 저장, 관리, 조작하기 위한 클래스 템플릿 자료구조이다.템플릿 기반이므로 컴파일 타임에 타입 검사가 이루어져 타입 안정성이 높고,반복자를 통해 컨테이너의 원소에 공통된 방식으로 접근할 수 있다.또한 반복자를 이용하면 algorithm 라이브러리의 함수들과 함께 사용할 수 있다.STL 컨테이너는 크게 다음과 같이 나눌 수 있다.시퀀스 컨테이너연관 컨테이너컨테이너 어댑터각 분류는 데이터를 저장하는 방식과 제..

C++, CS 2026.05.04

[C++] push_back과 emplace_back의 차이

오늘은 vector에 원소를 추가할 때 사용하는 push_back과 emplace_back의 차이를 정리해보려고 한다.두 함수는 모두 컨테이너의 끝에 원소를 추가한다는 점은 같지만 원소를 추가하는 방식에는 차이가 있다.push_back : 이미 만들어진 객체를 추가한다.emplace_back : 생성자 인자를 받아 컨테이너 내부에서 객체를 직접 생성한다.핵심 차이는 객체를 만들어서 넣느냐,아니면 객체를 만들 인자를 넘겨서 내부에서 생성하느냐이다.push_backpush_back은 이미 생성된 객체를 vector에 추가할 때 주로 사용한다.std::vector v;Test obj(10);v.push_back(obj);위 코드에서는 이미 만들어진 obj를 vector에 넣는다.또한 임시 객체를 만들어서 넣을..

C++, CS 2026.05.01