본문 바로가기

C++18

[C++] 순수 가상 함수, 추상 클래스, 그리고 인터페이스 C++ 에서는 "부모 클래스로 자식 객체를 관리" 하는 다형성이라는 개념이 있습니다. 이 개념을 확장하면 순수 가상 함수, 추상 클래스, 인터페이스라는 용어들이 등장하는데 이 글에서는 이와 관련된 내용을 정리해 보겠습니다. 1. 순수 가상 함수 (Pure Virtual Function)순수 가상 함수는 함수를 선언만 하고 본체 (구현부) 를 작성하지 않는 함수입니다.문법적으로는 함수 선언 뒤에 = 0; 을 붙여 표현합니다.함수를 순수 가상 함수로 선언하면, 부모는 자식 클래스에게 "이런 기능이 반드시 있어야 해" 라고 지시하는 입장인 것이고, 실제 동작은 상속받는 자식이 정의하도록 강제합니다.class Animal {public: // 순수 가상 함수: 본체가 없고 = 0이 붙음 virtua.. 2026. 2. 27.
[C++] Enum 의 진화와 실무적인 절충안 C++ 프로젝트에서 상태값이나 타입을 정의할 때 enum은 거의 필수적으로 사용됩니다. 하지만 프로젝트 규모가 커질수록 enum을 어떻게 관리하느냐가 코드의 가독성과 유지보수성에 직접적인 영향을 줍니다. 이번 글에서는 전통적인 방식에서 시작해 C++11의 변화, 그리고 실무에서 자주 사용하는 절충안까지 흐름으로 정리해 보겠습니다. 1. 전통적인 C 스타일 enum 가장 단순하고 직관적인 방식입니다.enum MonsterType { Slime, Skeleton, Boss, Max};초기에는 문제가 없어 보이지만, 프로젝트가 커지면 열거자 이름이 전역 공간으로 노출되면서 충돌 위험이 생깁니다. 예를 들어 다른 시스템에서도 비슷한 이름을 사용하게 됩니다.enum ItemType { .. 2026. 2. 26.
[C++] static 완전히 이해하기 C++에서 static 은 처음 접할 때 가장 헷갈리는 키워드 중 하나입니다. 일반 함수에 붙으면 파일 내부에서만 사용되고, 클래스 멤버에 붙으면 객체 없이 전역처럼 사용됩니다. 겉보기에는 서로 정반대처럼 보이기 때문에 혼란이 시작됩니다.이 글에서는 static 을 하나의 관점으로 정리합니다.“밖으로 떠돌아다니지 못하게 특정 범위에 고정시키는 것” 여기서 중요한 점은 무엇에 고정되느냐가 상황에 따라 다르다는 것입니다. static 이 처음 등장한 이유C/C++ 환경에서는 여러 개의 소스 파일을 컴파일한 뒤 하나의 프로그램으로 연결 (link) 합니다. 이때 각 파일에 정의된 함수 이름은 기본적으로 전역 심볼로 공개됩니다.// fileA.cppvoid helper() {}// fileB.cppvoid he.. 2026. 2. 25.
[C++] 헤더 파일에서 Namespace와 const를 사용해 설정값 관리하기 C++ 프로젝트에서 윈도우 크기나 게임 설정값을 여러 클래스에서 공유해야 할 때, 가장 효율적인 방법은 namespace와 const를 조합하여 헤더 파일에 선언하는 것입니다. 1. 기본 구조 (Config.h)namespace를 사용해 이름 충돌을 방지하고, const를 붙여 상수로 선언합니다.#ifndef CONFIG_H#define CONFIG_Hnamespace WindowConfig { const int Width = 1280; const int Height = 720;}#endif 2. 왜 반드시 const를 붙여야 하는가?헤더 파일에 int Width = 1280;과 같이 일반 변수를 선언하고 여러 .cpp 파일에서 #include하면 중복 정의(Multiple Definition.. 2026. 2. 18.
[C++] 값 복사는 무조건 느리다는 편견과 현대적 기준 1. 배경 : 값 복사 비용에 대한 오해오랫동안 C/C++ 개발 환경에서 “복사는 느리고 참조는 빠르다”는 규칙은 당연한 상식이었습니다. 이는 과거의 저성능 컴파일러와 하드웨어 제약 속에서는 유효한 지침이었으나, 현대 CPU 아키텍처와 SIMD 연산, 고도화된 최적화 컴파일러 환경에서는 이 규칙을 재검토할 필요가 있습니다. 2. 하드웨어 관점 : 레지스터와 역참조Rectangle, Vector4, Color 등 16바이트 내외의 작은 구조체는 현대 CPU에게 이른바 "한 입 거리" 입니다.값 전달 시 CPU는 데이터를 즉시 레지스터에 적재하여 연산에 투입합니다. 메모리 복사 비용보다 레지스터 직접 연산의 이득이 더 큽니다.참조 전달 시 주소(8바이트)를 전달한 뒤, CPU가 메모리(RAM)를 다시 조회하.. 2026. 2. 15.
참조 반환(Return by Reference)의 이해와 활용 C++ 에서 함수 리턴 시 발생하는 복사 비용을 줄이고, 원본 데이터를 효율적으로 제어하는 원리에 대해 정리합니다. 1. 함수 리턴 시 '임시 복사본' 이 생성함수는 내부에서 return 문을 만나면, 반환할 값을 임시 메모리에 복사하여 생성해 둡니다. 이때 복사 비용이 1번 발생하게 됩니다.Item GetItem(){ return item_; // item_를 복사하여 '임시 객체'를 생성 후 반환}여기서 주의할 점은 item_가 클래스의 멤버 변수라 하더라도, 멤버 변수 원본 데이터가 직접 반환되는 것이 아니라 임시 객체를 거쳐서 반환된다는 점입니다. 따라서 이 임시 객체는 해당 문장이 끝나면 소멸하는 존재이므로, 외부에서는 참조 형태로 받을 수 없습니다.Item& a = GetItem(); /.. 2026. 1. 27.