본문 바로가기

전체 글191

13. C++ 스마트 포인터에 대해서 C++ 스마트 포인터란? 메모리 관리는 C++ 프로그램에서 가장 중요하면서도 까다로운 부분 중 하나이다. 전통적으로 C++에서는 new와 delete를 사용하여 수동으로 메모리를 할당 하고 해제해야 하지만, 때문에 이 과정에서 실수 하나로 메모리 누수나 댕글링 포인터 같은 문제가 발생하게 된다. 스마트 포인터는 C++11에서 이러한 문제를 해결하기 위해서 도입된 세가지 주요 스마트 포인터 기능이다. 스마트 포인터의 종류는 아래 3가지가 있다. 1. unique_ptr2. shared_ptr3. weak_ptr 해당 스마트 포인터들의 개념, 사용법, 그리고 실전 예제를 통해메모리 관리를 안정적으로 하는 법을 알아보자. 1. unique_ptr: 단일 소유권 포인터std::unique_ptr는 가장 간.. 2025. 7. 19.
12. C++ 배열에 대해서 배열이란?배열은 동일한 데이터 타입의 값들을 순차적으로 저장하는 메모리 블록이다. - 모든 원소는 연속된 메모리 공간에 저장된다. - 정적크기 : 크기를 고정해야 하며, 실행중 변경할 수 없다.- 인덱스는 0부터 시작한다.(항상)- 동일 타입 : 모든 원소는 같은 데이터 타입을 가져야 한다. - 인덱스 접근 : O(1) 시간에 임의의 원소에 접근이 가능하다. 배열 선언#include using namespace std;int main() { // 1. 크기만 지정 (초기화 X - 쓰레기 값) int scores[5]; // 2. 선언과 동시에 초기화 int values[3] = {1, 2, 3}; // 3. 크기 생략 가능 (자동 결정) float rates[] = {.. 2025. 7. 16.
5. 언리얼 엔진 GAS에 대해서 GAS란 무엇인가GAS는 게임 내 캐릭터의 능력을 관리하는 프레임워크다. 다음과 같은 기능들을 구현할 수 있다:파이어볼을 쏘는 스킬체력 회복 포션 사용독 데미지를 받는 디버프이동속도 증가 버프이러한 기능들을 체계적으로 관리하는 것이 가능하다.GAS의 4대 핵심 구성요소1. Ability System Component (ASC)모든 것을 관리하는 중앙 관리자다. 캐릭터에 하나씩 부착하여 사용한다.2. Gameplay Ability실제 스킬이나 행동을 정의한다. "파이어볼 쏘기", "점프하기" 등이 이에 해당한다.3. Gameplay Effect능력이 만들어내는 효과다. "데미지 10", "5초간 이동속도 20% 증가" 등을 정의한다.4. Attribute Set캐릭터의 스탯을 정의한다. 체력, 마나, 공격.. 2025. 7. 15.
11. C++ 참조자에 대하여 참조란 무엇인가?실생활 비유로 이해하기본명: 김철수별명: 철수, 철수야, 수야특징: 어떤 별명으로 불러도 같은 사람을 가리킴C++의 참조와 비교시원본 변수: 실제 메모리에 저장된 변수참조 변수: 원본 변수의 또 다른 이름 (별명)특징: 참조로 접근하든 원본으로 접근하든 완전히 같은 변수포인터 vs 참조 비교특징 포인터 참조개념메모리 주소를 저장변수의 별명선언int* ptrint& ref초기화나중에 가능선언과 동시에 필수재할당다른 변수를 가리킬 수 있음불가능null 값가능 (nullptr)불가능메모리별도의 메모리 공간 차지메모리 공간 차지 안함연산포인터 연산 가능불가능참조의 기본 사용법기본 문법#include using namespace std;int main() { int original = 100.. 2025. 7. 15.
10. C++ 포인터 기초 : 메모리 주소의 이해 포인터란 무엇일까?포인터는 집 주소와 같은 것, 즉 집에는 고유한 주소가 있듯(서울시 어쩌구)모든 변수들도 메모리의 저장되므로 주소가 필요하다. 다시 정리해서 말하자면, 메모리 주소는 각 데이터가 저장된 위치의 고유 번호이다. 포인터는 이 주소를 기억하는 변수(메모장 역할)이다. 그렇다면 주소를 따라가서 실제 데이터를 가지고 올 수 있나? 라는 생각을 할텐데, 당연히 가능하고 이를 역참조라고 부른다. 메모리 구조 시각화메모리 주소 변수명 저장된 값1000 number 421004 ptr 1000 (number의 주소)1008 other 100 여기서 ptr은 number의 주소인 1000을 저장하고 있다. .. 2025. 7. 15.
1. Windows 배치파일 제작 기본 문법 정리 Windows 운영 체제에서 반복적이거나 자동화된 작업을 수행할 때 배치 파일(Batch File)은 매우 유용한 도구이다.메모장에서 직접 배치 파일을 작성할 때 주로 사용되는 핵심 문법들을 정리하여 설명한다.1. 기본 설정 및 정보 출력@echo off이 명령어는 배치 파일이 실행될 때 각 명령어가 콘솔 화면에 표시되는 것을 방지한다. @ 기호는 echo off 명령어 자체도 숨기는 역할을 한다.사용 예:@echo off echo 이 줄만 화면에 표시된다.REM (Remark)주석을 나타내는 명령어이다. REM 뒤에 오는 텍스트는 실행되지 않으며, 스크립트의 설명을 위해 사용된다.사용 예:REM 이것은 배치 파일의 주석이다. echo Hellochcp [코드페이지]콘솔의 코드 페이지를 변경하는 명령어이.. 2025. 7. 12.
9. 비트 연산과 Bitflag, Bitmask에 대해서 비트 연산이란?비트연산은 그렇게 자주 사용되지는 않지만 특정상황에서는 매우 유용하다. 대표적으로 게임서버에서 ID를 생성할 때 정보를 압축해서 저장하거나,특정 숫자의 개별 비트를 조작할때 사용된다. 기본 비트 연산자 1. Bitwise Not(~)모든 비트를 뒤집는 연산이다. 0은 1로, 1은 0으로 변환된다. int a = 5; // 0101int result = ~a; // 1010 (음수로 표현됨) 2. Bitwise And(&)두 비트가 모두 1일 때만 1을 반환한다. int a = 5; // 0101int b = 3; // 0011int result = a & b; // 0001 = 1 3. Bitwise or(|)두 비트 중 하나라도 1이면 1을 반환한.. 2025. 7. 9.
2. Algorithm : 알고리즘에 대해서 알고리즘이란 무엇인가?알고리즘은 하나의 문제를 해결하기 위한 단계적 절차나 방법을 의미한다. 같은 문제라도 여러가지 다른 방법으로 해결 할 수 있으며, 이때 효율성이 가장 중요한 선택 기준이 됨. 알고리즘의 핵심 특징- 명확성 : 각단계가 명확하고 모호하지 않아야 함.- 유한성: 유한한 단계 내에서 종료되어야 함.- 입력 : 0개 이상의 입력이 있어야 함- 출력 : 1개 이상의 출력이 있어야 함. - 효율성 : 문제 해결에 걸리는 시간과 공간이 합리적이어야 함. 실생활 예시: 전화번호부에서 이름 찾기문제: 전화번호부에서 "홍길동"의 전화번호 찾기방법 1: 순차검색1. 전화번호부의 첫 페이지부터 시작2. 한 명씩 차례대로 이름을 확인3. "홍길동"을 찾을 때까지 반복4. 찾으면 전화번호 반환 방법 2:.. 2025. 6. 9.
1. Algorithm : 피보나치 수열 & 다이나믹 프로그래밍 피보나치 수열이란? - 피보나치 수열은 이탈리아 수학자 레오나르도 피보나치가 발견한 수열이다. 앞의 두수를 더해서 다음 수를 만들어가는 규칙을 가지고 있음. 참고로 알고리즘을 할 때 해당 수학적 걔념이 많이 쓰인다 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...규칙을 자세히 보면:0번째: 01번째: 12번째: 0 + 1 = 13번째: 1 + 1 = 24번째: 1 + 2 = 35번째: 2 + 3 = 5수학적으로 표현하면: F(n) = F(n-1) + F(n-2)이다. 피보나치 수열을 구현하는 3가지 방법1. 반복문 방식(for문) - 가장 직관적이다. 2. 재귀 방식 - 수학적 정의와 가장 유사하다. 3. 다이나믹 프로그래밍 방식 - 가장 효율적이다. 1. 반복문(for문) .. 2025. 6. 9.
1. Devtalk : 개발 공부에서는 AI를 어디까지 사용하는 것이 이로운가? 현재 개발 업계의 과도한 AI 사용이 과연 옳지 않은 것인가?최근 2~3년 부터 LLM 모델의 등장으로 인해서 세상의 흐름이 매우 빠르게 변하고 있다.개발 업계에서 이미 웹쪽은 LLM AI에 의해서 사실상 초보 개발자가 격퇴당한 수준이나 마찬가지일 만큼그만큼 LLM의 성능이 갈수록 좋아지고, 그만큼 현업의 주니어, 또는 아직 취준생인 사람들은사실상 가장 힘든 시기를 보내고 있지 않을까 싶다. 그만큼 AI를 활용한 코드들도 굉장히 많아지고 있으며, 심지어 마이크로소프트의 경우는 현재 개발, 상용화된 프로그램중 30%정도는 AI가 생성한 코드라고 한다. 메타나 구글도 비슷하게 추세를 따라가고 있는 지금, 과연 현재 개발자를 지망하는 학생들은 어떻게 해야할까? 최근 아마존을 취업한 20대가 사실 코딩 테스트.. 2025. 5. 21.
8. C++로 GameObjectPool을 구현 해보자. C++ 게임 오브젝트 풀 패턴 상세 구현 게임 개발에서의 성능은 핵심 요소이다. 특히 미사일, 총알, 파티클 등 수많은 객체가 동시에 생성되며, 소멸되는 상황에서메모리 관리는 게임의 프레임률과 직결된다. 이번글에서는 메모리 관리 최적화의 대표적 기법인 오브젝트 풀(Object Pool) 패턴을 C++로 구현 해보겠다. 오브젝트 풀 패턴이란?오브젝트 풀 패턴은 자주 생성되고 파괴되는 객체들을 위해 미리 메모리를 할당해 주고서필요할 때 이 풀에서 객체들을 가지고와서 사용한 후 다시 풀로 반환하는 방식이다. 주요 장점은 메모리 할당 및 해제시 오버헤드가 감소한다. new와 delete 연산의 빈번한 호출을 피하게 된다. 또한 메모리 파편화를 방지하여 동적 메모리의 반복적인 할당 및 해제로 인한 메모리 파.. 2025. 5. 21.
7. C++ friend, 동적메모리 관리, 클래스 상속에 대해서 알아보자. C++ Friend 에 대해서 객체지향 프로그래밍의 핵심 원칙중 하나는 캡슐화, 그리고 데이터 은닉이다. 하지만 때로는 예외를 둘필요가 있는데, C++에서는 friend 키워드를 사용하여 은닉성의 예외를 두기도 한다. Friend 키워드는 C++에서 제공하는 특별한 접근 권한 지정자로. 다른 클래스나 함수에게 자신의 private 또는 protected 멤버에 접근할 수 있는 권한을 부여한다. 해당 기능으로 코드의 효율성이나 유연성을 높이기 위해서 제공이 된다. 1. 전체 클래스 권한 부여.class PlayLevel{ // 다른 멤버들... friend class DesignedLevel; // DesignedLevel 클래스에 접근 권한 부여private: int mCompon.. 2025. 5. 21.