전체 코드

#include <iostream>
using namespace std;

// 상수를 나열한 예 (열거형 없이)
const int SCISSORS = 1;   // 가위
const int ROCK = 2;       // 바위
const int PAPER = 3;      // 보

// 열거형 선언 - 하나의 세트로 묶기
enum ENUM_SRP
{
    ENUM_SCISSORS = 1,   // 1로 시작
    ENUM_ROCK,           // 자동으로 2
    ENUM_PAPER           // 자동으로 3
};

int main()
{
    int choice = ENUM_ROCK;   // 열거형 값 사용 예시
    cout << "선택한 값 : " << choice << endl;

    return 0;
}

🔥 한 줄씩 상세 분석

코드설명
#include <iostream>표준 입출력 라이브러리 포함 (cout 사용 목적)
using namespace std;매번 std:: 안 쓰게 도와주는 선언
const int SCISSORS = 1;가위라는 의미를 가진 상수 선언
const int ROCK = 2;바위라는 의미를 가진 상수 선언
const int PAPER = 3;보라는 의미를 가진 상수 선언
enum ENUM_SRP { ... }서로 관련된 상수들을 묶은 열거형 정의
ENUM_SCISSORS = 1첫 번째 값 1로 지정
ENUM_ROCK자동으로 2가 됨
ENUM_PAPER자동으로 3이 됨
int choice = ENUM_ROCK;열거형 값으로 변수 초기화
cout << choice선택한 값 출력 (2 출력)

📌 열거형의 핵심 포인트 정리

구분설명
열거형 정의서로 관련된 상수를 하나의 그룹으로 관리
자동 값 할당첫 값만 지정하면, 이후 값은 자동으로 +1
메모리 절약컴파일 시 실제 값으로 치환되어 메모리 절약
디버깅 용이성디버그 시 의미 있는 이름으로 확인 가능
관리 편의성그룹화되어 가독성 및 유지보수 쉬움

💡 왜 열거형을 써야 할까?

방법특징문제점
const 상수상수 이름과 값 연결개수가 많아지면 관리 어려움
#define값 치환 (매크로)디버깅 어려움, 타입 체크 안됨
열거형그룹화 + 자동 증가없음 (가장 추천)

🚨 주의할 점

상황설명
const는 메모리 낭비 가능상수지만 경우에 따라 메모리 차지
#define은 디버그 불편전처리 단계 치환 → 디버그 시 추적 어려움
enum은 타입 안전성 없음enum끼리 타입 체크는 안 됨 (C++11 이후 개선 가능)
값 강제 변경 시 주의중간 값 건너뛰기 가능 (주의)

💬 const vs enum vs define 비교 표

항목const#defineenum
메모리 차지컴파일러 최적화 여부에 따라 다름안 차지 (치환)안 차지 (치환)
디버그 편의성보통 괜찮음값 추적 어려움디버그 친화적
타입 안전성있음없음없음 (C++11 이후 개선)
가독성좋음나쁨매우 좋음
그룹화불편불가능편리
추천도중간비추강력 추천

⚠️ 메모리 관점 정리

선언 위치메모리 영역설명
전역 const보통은 치환되지만, 주소 참조 시 .data컴파일러 최적화 영향 받음
지역 const스택에 할당될 수도 있음주소 참조 여부 따라 달라짐
#define메모리 할당 없음소스코드 치환
enum메모리 할당 없음컴파일 시 치환

📊 실전 예제 비교 (가위바위보)

const 방식

const int SCISSORS = 1;
const int ROCK = 2;
const int PAPER = 3;

define 방식

#define SCISSORS 1
#define ROCK 2
#define PAPER 3

enum 방식

enum ENUM_SRP { ENUM_SCISSORS = 1, ENUM_ROCK, ENUM_PAPER };

추천 순서

1위 - enum (가독성, 유지보수, 디버깅 모두 최상)
2위 - const (디버그는 괜찮지만 그룹화 어려움)
3위 - #define (디버깅 불편, 에러 유발 가능성 높음)

📖 실습 문제 추천

난이도문제
가위바위보 열거형으로 다시 만들기
⭐⭐캐릭터 상태(이동/점프/공격) 열거형으로 관리
⭐⭐⭐몬스터 타입(슬라임/오크/드래곤) 열거형으로 관리
⭐⭐⭐⭐아이템 종류와 희귀도(enum class)로 관리

✨ enum class (C++11 이후)

특징설명
타입 안전성다른 enum과 혼동 불가
스코프 제공enum 이름이 스코프 역할
강력한 타입 체크암시적 형변환 방지
enum class MonsterType { Slime, Orc, Dragon };
MonsterType monster = MonsterType::Slime;

🛠️ 정리 요점

키워드핵심 내용
열거형관련된 상수 묶기
enum타입 없이 나열 가능
enum class타입 안전성 강화
const vs define vs enumenum 최강
메모리enum은 메모리 차지 없음

📥 필요 자료 제공 가능

✅ 정리 PDF
✅ 연습문제 (빈칸 채우기, 실습문제)
✅ 디버깅 실습 예제 (주소 참조 상황 확인)
enum class 심화 학습 자료


🙋‍♂️ 다음 학습 추천

다음 추천 주제이유
함수함수 구조 & 호출 과정 마스터
배열반복문과 배열 연계 학습
포인터메모리 직접 제어 감각 익히기
구조체데이터 묶음 관리 학습

필요한 자료나 다음 학습 주제 알려주시면 바로 준비해드릴게요!
열거형 완벽 마스터 축하드립니다 🎉
다음은 어떤 주제로 갈까요? 😎

profile
李家네_공부방

0개의 댓글