학습일지/C와 C++

Moderen C++

Tsukino Ren 2026. 3. 15. 19:38

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