Modern C++ 란?
C++11 이후에는 코드 안정성과 가독성을 높이기 위한 여러 키워드가 추가되었다.
대표적으로 enum class / auto / default / delete / final / override 등이 있다.
enum class
enum class는 범위 기반 열거형(scoped enum)이다.
예시
// Main.cpp
#include <iostream>
enum class Job
{
Warrior,
Mage
};
enum class Monster
{
Warrior,
Orc
};
int main(void)
{
Job playerJob = Job::Warrior;
Job npcJob = Job::Mage;
Monster monster = Monster::Warrior;
switch (playerJob)
{
case Job::Warrior:
std::cout << "전사 선택\n";
break;
case Job::Mage:
std::cout << "마법사 선택\n";
break;
}
switch (npcJob)
{
case Job::Warrior:
std::cout << "파트너 전사 선택\n";
break;
case Job::Mage:
std::cout << "파트너 마법사 선택\n";
break;
}
switch (monster)
{
case Monster::Warrior:
std::cout << "전사 등장\n";
break;
case Monster::Orc:
std::cout << "오크 등장\n";
break;
}
}
출력

enum class 장점
- 가독성 증가
- 타입 안정성
- 실수 방지
enum class 단점
- 숫자로 바로 사용 불가
enum 과 enum class 차이
| 구분 | enum | enum class |
| 접근 방식 | Warrior | Job::Warrior |
| 암시적 형변환 | 가능 | 불가능 |
| 이름 충돌 | 가능 | 없음 |
auto
auto는 컴파일러가 변수 타입을 자동으로 추론하는 키워드이다.
예시
int main(void)
{
auto num = 20; // int로 변환
auto num2 = 1.25; // double로 변환
auto name = "Tuskino"; // const char* 로 변환
std::cout << num << std::endl;
std::cout << num2 << std::endl;
std::cout << name << std::endl;
}
출력

auto 장점
- 코드 간결성
- 타입 변경에 강함
- 반복문에서의 편함
auto 단점
- 타입이 명확하지 않을 수 있음
- 잘못된 타입 추론 가능성 있음
default
컴파일러가 기본 함수를 생성하도록 하는 키워드다. 생성자나 소멸자에서 사용한다.
class Player
{
public:
Player() = default;
};
언제 사용하는가 ?
클래스에 다른 생성자를 만들었을 때, 기본 생성자를 유지하고 싶을 때 사용한다.
class Player
{
public:
Player(int name)
{
}
Player() = default;
};
default 장점
- 코드 간결성
- 컴파일러 최적화
- 의도,의미 표현
default 단점
- 동작을 직접 제어 못함
- 잘못 사용 시 의도, 의미가 애매함
delete
해당 키워드는 특정 함수 사용을 금지 할 때 사용한다.
예시
int main(void)
{
Player* player = new Player();
delete player;
player = nullptr;
}
delete 와 = delete
delete는 동적 메모리 해제
= delete는 복사 생성자 사용금지 의 차이가 있다.
override
해당 키워드는 가상함수를 재정의했다 라는 것을 명확하게 표시하는 키워드다.
class Character
{
public:
virtual void attack() = 0;
};
class Player : public Character
{
public:
void attack() override
};
void Player::attack() override
{
std::cout << "플레이어 공격\n";
}
override의 장점
- 코드의 재사용성과 확장성
- 유지보수의 효율성
- ★ 실수 방지 ★
virtual 와 override 차이
virtual은 부모 클래스에서 가상 함수임을 선언하는 키워드이며
override는 자식 클래스에서 부모의 virtual 함수를 재정의 했다는 것을 명확하게 표시하는 키워드이다.
왜 override를 쓰는가 ?
class Character
{
public:
virtual void attack() = 0;
};
class Player : puvlic Character
{
public:
void atta()
{
}
};
override 를 쓰면 컴파일 에러가 나서 오타가 있음을 알려주지만
사용하지 않으면 새로운 함수가 만들어지는 것으로 끝나기에 컴파일 에러가 나지 않는다.
final
final 해당 키워드는 더 이상 상속하거나 오버라이드 하지 못하도록 막는 키워드다.
class final
class Boss final
{
};
해당 클래스는 상속이 불가능 하다.
function final
class Character
{
public:
virtual void attack() final
{
std::cout << "해당 어택 함수는 파생 클래스에서 override 불가능";
}
};
| enum class | 범위 기반 열거형 |
| auto | 타입 자동 추론 |
| defailt | 기본 함수 자동 생성 |
| delete | 함수 사용 금지 |
| override | 가상함수 재정의 명시 |
| final | 상속 또는 override 금지 |
마무리
훑어 보면서 정리햇다보니 빠지거나 부족한 부분이 많을 수 있다.
다른 것들은 사실 잘 모르겟으나 override는 캐릭터 만들다보니 자주 쓰게 되었고 enum class는 많이 써볼려고 노력해봐야겟다
'학습일지 > C와 C++' 카테고리의 다른 글
| C++ 인벤토리 시스템 구현 (0) | 2026.03.17 |
|---|---|
| C++ Debugging (0) | 2026.03.16 |
| C++ Vector (0) | 2026.03.14 |
| C++ Template Programming (0) | 2026.03.13 |
| C++ std::string (0) | 2026.03.13 |