본문 바로가기

Game DevTip/C++18

18. C++ 템플릿 활용 C++ 클래스 템플릿이란?템플릿은 타입에 구애받지 않고 재사용 가능한 코드를 작성하게 한다. 특히 클래스 템플릿은 C++ 프로그래밍에서 코드 재사용성과 타입 안전성을 높이는 도구이다. 클래스 템플릿은 다양한 타입에 대해서 동일한 구조와 기능을 제공하는 클래스를 정의하는 방법. 클래스 템플릿의 매개변수는 클래스의 멤버 변수 타입, 메서드의 매개 변수나 반환 타입을 결정한다. 게임 개발에서는 기획서에 정의된 데이터 처리나 유사한 기능을 가진 게임 객체 관리를 위해서 자주 사용된다.클래스 템플릿 선언클래스 템플릿은 일반 함수 템플릿과 유사한 방식으로 선언한다.// C++14templateclass ObjectMgr { ... }// C++17templateclass ObjectMgr { ... } templ.. 2025. 7. 28.
17. C++ 람다(Lamda) 표현식 람다 표현식이란?C++에서는 C++11에 도입된 람다 표현식(Lambda Expressions)은코드를 더 간결하고 가독성 있게 작성할 수 있는 코딩 표현식중 하나이다. 특히 알고리즘, STL과 함께 사용 시 진가를 발휘 할 수 있는 기능. 간단히 말하자면 이름 없는 함수(익명함수)를 의미한다. 일반적으로 짧고 간단한 작업을임시로 함수처럼 사용할 때 유용하다. 기존에 함수를 정의하고 이름을 지정하는 번거로움 없이코드 내에서 직접 함수 로직을 작성할 수 있다. 주요 장점들은 아래와 같다. 1. 코드를 더 간결하게 작성 가능하다. 2. 함수를 사용하는 곳과 가까운 위치에 정의하여 가독성을 향상시킨다. 3. 지역 변수에 쉽게 접근 가능하다.(캡처)4. 함수 객체를 즉석에서 생성 가능하다. 5. STL 알.. 2025. 7. 27.
16. C++ 순수 가상함수(추상 클래스 & 인터페이스)에 대해서 C++ 추상 인터페이스와 추상 클래스 객체 지향에서 추상화는 매우 중요한 핵심 개념중 하나이다. C++에서 추상화를 구현하는 주요 방식으로 추상 인터페이스와 추상 클래스가 있는데, 해당 개념, 그리고 순수 가상함수와 추상 클래스의 차이점에 대해서도 알아보자. 추상 인터페이스의 개념추상 인터페이스는 클래스의 기능(행위)을 정의하지만구현은 포함하지 않는 순수 가상 함수(pure virtual function)들의 집합이다.C++에서 추상 인터페이스는 다음과 같은 특징을 가진다. 1. 순수 가상 함수만 포함 하는 클래스2. 함수에 대한 구현 부분이나 멤버 변수가 존재하지 않음. 3. 헤더파일에 선언되며, public 메서드로만 선언된 클래스. 4. 인터페이스 클래스는 종종 'I' 접두어를 사용(예시 : IG.. 2025. 7. 26.
15. C++ 예외 처리 Try Catch문 C++ 예외 처리 : try-catch, throw, noexcept예외 처리는 C++ 프로그래밍에서 오류를 감지하고 대응하는 매커니즘.적절히 활용한다면 안정적인 프로그램을 작성할 수 있으며,오류 처리 로직을 메인코드와 분리해서 가독성을 높일 수 있다. 1. Try-Catch 문의 기본 개념기본 구조와 동작 방식C++의 예외처리는 try, throw, catch 세가지 키워드를 중심으로 이뤄진다. #include using namespace std;double SafeDivide(double num, double den){ if (den == 0) { throw invalid_argument("Divide by zero"); } return num / den;}int ma.. 2025. 7. 25.
14. C++ 이동의미론과 rvalue & lvalue 이동의미론이란?성능최적화에 관심이 많은 개발자라면 한번쯤은 들어봤을 이동의미론.C++11에 도입되고서 C++17에서 더욱 개선된 이동의미론의 의미는 뭘까? 불필요한 객체 복사를 줄이고, 리소스 소유권을 효율적으로 이전하는 매커니즘. 기존에는 객체를 전달할 때 깊은 복사(deep copy)가 발생했지만, 이동의미론 사용시에는 리소스의 소유권만 이전하여 성능을 크게 향상 시킬 수 있다. 1.1 이동 의미론의 핵심 개념1.1.1 우측값 참조(Rvalue References)우측값 참조는 &&를 사용하여 표현하며, 임시 객체나 곧 소멸될 객체를 참조한다.즉, 임시 객체에 대한 우측값을 참조한다는 것. string&& rvalue_ref = string ("Hello"); 1.1.2 이동 생성자와 이동 대입 .. 2025. 7. 22.
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.
11. C++ 참조자에 대하여 참조란 무엇인가?실생활 비유로 이해하기본명: 김철수별명: 철수, 철수야, 수야특징: 어떤 별명으로 불러도 같은 사람을 가리킴C++의 참조와 비교시원본 변수: 실제 메모리에 저장된 변수참조 변수: 원본 변수의 또 다른 이름 (별명)특징: 참조로 접근하든 원본으로 접근하든 완전히 같은 변수포인터 vs 참조 비교특징 포인터 참조개념메모리 주소를 저장변수의 별명선언int* ptrint& ref초기화나중에 가능선언과 동시에 필수재할당다른 변수를 가리킬 수 있음불가능null 값가능 (nullptr)불가능메모리별도의 메모리 공간 차지메모리 공간 차지 안함연산포인터 연산 가능불가능참조의 기본 사용법기본 문법#include using namespace std;int main() { int original = 100.. 2025. 7. 15.