2026/04 11

[C++ Study] 가상상속과 연산자 오버로딩

고성능 게임 엔진이나 대규모 시스템 개발을 위한 C++의 정수, 가상 상속과 연산자 오버로딩을 실무적인 시각으로 정리합니다.1. 가상 상속 (Virtual Inheritance)교과서적 정의: 다이아몬드 상속 문제의 해결사다중 상속 체계에서 발생하는 '다이아몬드 문제(Diamond Problem)'를 해결하기 위한 기법입니다. 최하위 자식 클래스 인스턴스 내부에 베이스 클래스의 멤버가 중복 생성되는 것을 방지합니다.기술 디테일: vbptr (Virtual Base Pointer)상속 시 virtual 키워드를 사용하면, 컴파일러는 객체 내부에 vbptr을 생성합니다. 이를 통해 최상위 부모 객체의 오프셋을 계산하여 단 하나의 인스턴스만 공유하도록 제어합니다.실무적 관점 및 모바일 환경 고려사항메모리 및 ..

C++ 공부 2026.04.28

[C++ Study] 가상 함수부터 인터페이스까지: 객체지향의 핵심 정리

[C++/UE5] 가상 함수부터 인터페이스까지: 객체지향의 핵심 정리C++ 개발자라면 반드시 마스터해야 할 순수 가상 함수, 추상 클래스, 인터페이스, 그리고 가상 소멸자의 개념을 실무적 관점에서 정리합니다.1. 순수 가상 함수(Pure Virtual Function)와 추상 클래스● 교과서적 정의순수 가상 함수: 함수의 선언 뒤에 = 0;을 붙여 구현부를 비워둔 함수입니다. "이 기능은 자식 클래스에서 반드시 구현하라"는 강제성을 부여합니다.추상 클래스: 순수 가상 함수가 하나라도 포함된 클래스입니다. 설계도 역할을 하며, new Base()와 같이 객체를 직접 생성(인스턴스화)할 수 없습니다.[심화] 순수 가상 함수도 구현부(Body)를 가질 수 있을까?네, 가능합니다. virtual void Fun..

C++ 공부 2026.04.24

[IronBird #1] - 플레이어 이동 + 터치 입력 구현 - UE5 C++ 탑뷰 슈팅게임 - Claude Code 활용기

IronBird 개발일지 #1플레이어 이동 + 터치 입력 구현C++ · APawn · APlayerController · 탑뷰 카메라🎯 목표Blueprint 없이 C++만으로 플레이어 기체의 터치 드래그 이동을 구현한다. 카메라는 위에서 내려다보는 탑뷰로 고정하고, 화면 좌표를 월드 좌표로 변환해 기체가 손가락을 따라오게 만든다.AI로 클래스 구조 생성 → 내가 빌드 에러 원인 분석 → 내가 트러블슈팅 → 동작 확인🔧 구현 내용Blueprint 없이 C++ 3개 클래스로 구성했다.클래스역할AIronBirdPawn기체 메시 + 탑뷰 카메라 + 목표 위치 보간 이동AIronBirdPlayerController터치/마우스 입력 → 월드 좌표 변환 → Pawn 전달AIronBirdGameModeDefault..

[C++ Study] 가상 함수와 V-Table: 동적 바인딩의 내부 메커니즘

[C++] 가상 함수와 V-Table: 동적 바인딩의 내부 메커니즘객체지향의 꽃 '다형성'을 구현하는 하부 구조와 성능 최적화1. V-Table (가상 함수 테이블)의 동작 원리C++에서 virtual 키워드를 사용하는 순간, 컴파일러는 단순히 함수를 호출하는 코드를 생성하는 것이 아니라 복잡한 메모리 구조를 설계합니다.📌 V-Table 생성: 클래스에 가상 함수가 하나라도 있으면, 해당 클래스만을 위한 함수 포인터 배열(V-Table)이 읽기 전용 메모리 영역에 생성됩니다.📌 V-Ptr (가상 함수 포인터): 객체가 생성될 때, 메모리 레이아웃 최상단에 V-Table의 주소를 가리키는 포인터가 자동으로 추가됩니다.📌 오버라이딩(Overriding): 자식 클래스가 부모의 함수를 재정의하면, 자식 ..

C++ 공부 2026.04.19

[C++ Study] 객체지향 설계의 핵심: 관계 정의와 다형성 (Is-A, Has-A, Casting)

1. 관계 정의의 종류: Is-A vs Has-A설계 단계에서 가장 먼저 결정해야 할 것은 클래스 간의 관계입니다.Is-A (상속 관계)정의: 한 클래스가 다른 클래스의 일종임을 나타냅니다. (A는 B이다)언리얼 구현: class AMyCharacter : public ACharacter용도: 부모 클래스의 기능을 확장하거나, 공통 인터페이스를 통해 여러 객체를 동일한 방식으로 다룰 때(다형성) 사용합니다.Has-A (포함/소유 관계 - Composition)정의: 한 객체가 다른 객체를 구성 요소로 가지고 있음을 나타냅니다. (A는 B를 가지고 있다)언리얼 구현: UPROPERTY()로 선언된 컴포넌트 포인터나 멤버 변수.용도: 기능을 모듈화하고 객체 간의 결합도를 낮추는 데 유리합니다. 현대 프로그래..

C++ 공부 2026.04.18

[C++ Study] 키워드와 메모리 구조를 통한 안전한 코드 설계 (explicit, 형변환연산자, cast, mutable, 메모리영역)

1. explicit 키워드와 암시적 형변환 제어(1) 변환 생성자 (Conversion Constructor)매개변수가 하나인 생성자는 컴파일러에 의해 암시적 형변환(Implicit Conversion)에 사용될 수 있다. 이를 변환 생성자라 한다.문제점: 개발자가 의도하지 않은 시점에 임시 객체가 생성되어 로직 버그 및 성능 저하를 유발할 수 있다.(2) explicit의 역할생성자 앞에 explicit을 선언하면 컴파일러의 자의적인 형변환을 금지하고, 반드시 명시적 호출 시에만 객체가 생성되도록 강제한다.구분직접 초기화 (T a(b);)복사 초기화 (T a = b;)일반 생성자허용허용explicit 생성자허용차단 (컴파일 에러) class Gold {public: int Amount; e..

C++ 공부 2026.04.17

[IronBird #0] - 프로젝트 셋업 (GitHub · Git LFS · CLAUDE.md · Claude Code · MCP 서버) - Claude Code 활용기

IronBird 개발일지 #0 프로젝트 셋업 GitHub · Git LFS · CLAUDE.md · Claude Code · MCP 서버 🎯 왜 이 프로젝트를 시작했나 클라이언트 프로그래머 지원을 위한 포트폴리오 준비 중, AI 활용 경험이 필요했다. 목표는 단순히 "AI로 만들어달라"가 아니라, AI를 도구로 쓰면서 내가 판단하고 최적화하는 과정을 기록하는 것. 💡 AI로 [시간단축] → 내가 [문제발견] → 내가 [최적화] → [수치결과]주어는 항상 나. AI 출력의 품질을 판단할 수 있는 사람이 목표. 📋 프로젝트 개요 프로젝트명 IRONBIRD 장르 종스크롤 ..

[스파르타 부트캠프 언리얼트랙 수료 후기] 식자재 구매 MD에서 언리얼 개발자로: 비전공자 30대의 '최우수 프로젝트' 달성기

1. 식자재 현장에서 찾은 새로운 꿈저는 대학교 사회복지학과를 중퇴하고 보험 영업, 건어물 수입, 식자재 MD까지 정말 치열한 현장직을 전전해 왔습니다. 서른에 가까워진 나이, 정해진 진로 없이 흐르는 대로 살던 저에게 전환점이 된 곳은 뜻밖에도 식자재 회사였습니다. 그곳에서 개발자들과 협업하며 시스템이 만들어지는 과정에 매력을 느꼈고, '내가 정말 좋아하는 게임을 직접 만드는 사람이 된다면 얼마나 행복할까?'라는 질문이 머릿속을 떠나지 않았습니다.결국 하던 일을 모두 정리하고 무작정 부트캠프를 찾았습니다. 비전공자에 30대, 자신감은 바닥이었지만 언리얼 엔진이라는 전문성을 가져보고 싶다는 열망 하나로 업계 최고라는 스파르타 내일배움캠프의 문을 두드렸습니다.2. '작심삼일'을 '몰입'으로 바꾼 9 to ..

카테고리 없음 2026.04.15

[C++ Study] friend, 상속의 경계, 그리고 static의 메모리 전략

1. friend 키워드: 캡슐화의 전략적 해제friend는 클래스의 private 멤버에 접근할 수 있는 권한을 특정 외부 대상에게 부여하는 강력한 도구입니다.📋 교과서적 정의개념: 클래스 내부에 friend로 선언된 외부 함수나 클래스는 해당 클래스의 모든 접근 제한자를 무시하고 멤버에 접근할 수 있습니다.특징:단방향성: A가 B를 친구로 선언해도, A가 B의 비공개 멤버를 볼 수는 없습니다.전이되지 않음: 친구의 친구는 내 친구가 아닙니다.상속되지 않음: 부모의 친구가 자식 클래스까지 자동으로 친구가 되지는 않습니다.🛠️ 특정 함수에 대한 friend 선언클래스 전체가 아니라 특정 멤버 함수에만 권한을 열어주어 **'최소 권한의 원칙'**을 지킬 수 있습니다.// A.hclass A {publi..

C++ 공부 2026.04.10

[C++ Study] Side Effect, Android Vulkan, 그리고 현대적 상수(const/constexpr/consteval)

1. 사이드 이펙트 (Side Effect)함수가 자신의 반환값 외에 외부의 상태를 변경하거나 관찰 가능한 변화를 일으키는 행위입니다.📋 주요 사이드 이펙트의 예시외부 변수 수정: 전역 변수나 멤버 변수 값을 변경하는 경우I/O 작업: 로그 출력(printf, UE_LOG)이나 파일 저장객체 상태 변경: 인자로 받은 객체의 내부 값을 수정예외 발생: 프로그램의 실행 흐름을 갑작스럽게 중단💡 왜 사이드 이펙트를 경계해야 하는가?디버깅의 난해함: 상태를 읽기만 할 것 같은 함수(Get...)가 내부에서 상태를 바꾸고 있다면 버그 추적이 매우 힘듭니다.멀티스레드 위험: 여러 스레드가 동시에 외부 변수를 건드리는 경합 조건(Race Condition)을 유발합니다.최적화 제한: 컴파일러는 사이드 이펙트가 없..

C++ 공부 2026.04.09