๐Ÿš€ C ์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•(enum) ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐Ÿš€

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ C ์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•(enum) ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐Ÿš€

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ์—ด๊ฑฐํ˜•(enum)์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ์—ด๊ฑฐํ˜•์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•๊นŒ์ง€ ๋ชจ๋‘ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”! ๐Ÿ˜Š

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„์—์„œ ์ง€์‹๊ณผ ๊ธฐ์ˆ ์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท(https://www.jaenung.net)๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•˜๋“ฏ์ด, ์šฐ๋ฆฌ๋„ ์ด ๊ธ€์„ ํ†ตํ•ด C ์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•์— ๋Œ€ํ•œ ์ง€์‹์„ ๋‚˜๋ˆ„๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?

C ์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•(enum) ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ์ฝ”๋“œ ๊ตฌ์กฐํ™” ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

1. ์—ด๊ฑฐํ˜•(enum)์ด๋ž€?

์—ด๊ฑฐํ˜•์€ C ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ด๋ฆ„์„ ๋ถ™์ธ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ , ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์š”.

ย 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ์ฃผ์ผ์˜ ์š”์ผ์„ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ์—ด๊ฑฐํ˜• ์—†์ด๋Š” ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ :


#define SUNDAY    0
#define MONDAY    1
#define TUESDAY   2
#define WEDNESDAY 3
#define THURSDAY  4
#define FRIDAY    5
#define SATURDAY  6

ํ•˜์ง€๋งŒ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊น”๋”ํ•˜๊ณ  ์˜๋ฏธ ์žˆ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
};

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์˜๋„๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์ง€๊ณ , ์‹ค์ˆ˜๋กœ ์ž˜๋ชป๋œ ๊ฐ’์„ ํ• ๋‹นํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ IDE์˜ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์˜ ๋„์›€๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ฃ !

์—ด๊ฑฐํ˜•์˜ ์žฅ์  ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ํƒ€์ž… ์•ˆ์ •์„ฑ ์ œ๊ณต ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ

2. ์—ด๊ฑฐํ˜•์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

์—ด๊ฑฐํ˜•์„ ์„ ์–ธํ•˜๋Š” ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:


enum ์—ด๊ฑฐํ˜•์ด๋ฆ„ {
    ์ƒ์ˆ˜1,
    ์ƒ์ˆ˜2,
    ์ƒ์ˆ˜3,
    ...
};

๊ฐ ์ƒ์ˆ˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ์ƒ์ˆ˜ ๋’ค์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜• ์„ ์–ธ ํ›„์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ์žŠ์ง€ ๋ง๊ณ  ๋ถ™์—ฌ์ฃผ์„ธ์š”.

ย 

์—ด๊ฑฐํ˜• ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:


enum ์—ด๊ฑฐํ˜•์ด๋ฆ„ ๋ณ€์ˆ˜์ด๋ฆ„;

์˜ˆ๋ฅผ ๋“ค์–ด, ์•ž์„œ ์ •์˜ํ•œ Day ์—ด๊ฑฐํ˜•์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:


enum Day today;
today = MONDAY;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด today ๋ณ€์ˆ˜์—๋Š” MONDAY์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์—ด๊ฑฐํ˜• ์‚ฌ์šฉ ์˜ˆ์‹œ enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum Day today; today = MONDAY; if (today == MONDAY) { printf("์˜ค๋Š˜์€ ์›”์š”์ผ์ž…๋‹ˆ๋‹ค."); }

์ด ์˜ˆ์‹œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. 'MONDAY'๋ผ๋Š” ์ด๋ฆ„ ์ž์ฒด๊ฐ€ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๐ŸŒŸ

3. ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’

์—ด๊ฑฐํ˜•์˜ ๊ฐ ์ƒ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์ •์ˆ˜๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.


enum Color {
    RED = 100,
    GREEN,
    BLUE = 200
};

์ด ๊ฒฝ์šฐ, RED๋Š” 100, GREEN์€ 101, BLUE๋Š” 200์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ƒ์ˆ˜๋Š” ์ด์ „ ์ƒ์ˆ˜์˜ ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์š”.

ย 

์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


printf("RED: %d\n", RED);
printf("GREEN: %d\n", GREEN);
printf("BLUE: %d\n", BLUE);

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค:


RED: 100
GREEN: 101
BLUE: 200
์—ด๊ฑฐํ˜• ์ƒ์ˆ˜ ๊ฐ’ ์‹œ๊ฐํ™” RED (100) GREEN (101) BLUE (200)

์ด๋ ‡๊ฒŒ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์— ํŠน์ • ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ • ํ•„๋“œ์™€ ๋งคํ•‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜, ๊ธฐ์กด ์‹œ์Šคํ…œ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ํŠน์ • ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ฃ . ๐Ÿ˜Š

4. ์—ด๊ฑฐํ˜•์˜ ํ™œ์šฉ

์—ด๊ฑฐํ˜•์€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์‹ค์ œ์ ์ธ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์—ด๊ฑฐํ˜•์˜ ํ™œ์šฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4.1 ๋ฉ”๋‰ด ์‹œ์Šคํ…œ ๊ตฌํ˜„

ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฉ”๋‰ด ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


enum MenuOption {
    NEW_GAME,
    LOAD_GAME,
    SETTINGS,
    EXIT
};

enum MenuOption getUserChoice() {
    int choice;
    printf("1. ์ƒˆ ๊ฒŒ์ž„\n2. ๊ฒŒ์ž„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ\n3. ์„ค์ •\n4. ์ข…๋ฃŒ\n");
    printf("์„ ํƒํ•˜์„ธ์š”: ");
    scanf("%d", &choice);
    return (enum MenuOption)(choice - 1);
}

void handleUserChoice(enum MenuOption choice) {
    switch(choice) {
        case NEW_GAME:
            printf("์ƒˆ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.\n");
            break;
        case LOAD_GAME:
            printf("์ €์žฅ๋œ ๊ฒŒ์ž„์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.\n");
            break;
        case SETTINGS:
            printf("์„ค์ • ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.\n");
            break;
        case EXIT:
            printf("๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.\n");
            break;
        default:
            printf("์ž˜๋ชป๋œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.\n");
    }
}

์ด ์˜ˆ์ œ์—์„œ MenuOption ์—ด๊ฑฐํ˜•์€ ๋ฉ”๋‰ด์˜ ๊ฐ ์˜ต์…˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. getUserChoice ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ํ•ด๋‹นํ•˜๋Š” ์—ด๊ฑฐํ˜• ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , handleUserChoice ํ•จ์ˆ˜๋Š” ์„ ํƒ๋œ ์˜ต์…˜์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ๋ฉ”๋‰ด ์‹œ์Šคํ…œ NEW_GAME LOAD_GAME SETTINGS EXIT

4.2 ์ƒํƒœ ๊ด€๋ฆฌ

ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ๊ฒŒ์ž„์—์„œ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ๋„ ์—ด๊ฑฐํ˜•์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


enum GameState {
    MAIN_MENU,
    PLAYING,
    PAUSED,
    GAME_OVER
};

enum GameState currentState = MAIN_MENU;

void updateGame() {
    switch(currentState) {
        case MAIN_MENU:
            displayMainMenu();
            break;
        case PLAYING:
            updateGameLogic();
            break;
        case PAUSED:
            displayPauseMenu();
            break;
        case GAME_OVER:
            displayGameOverScreen();
            break;
    }
}

์ด ์˜ˆ์ œ์—์„œ GameState ์—ด๊ฑฐํ˜•์€ ๊ฒŒ์ž„์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. updateGame ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ MAIN_MENU PLAYING PAUSED GAME_OVER

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ƒˆ๋กœ์šด ์ƒํƒœ๋‚˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋„ ์‰ฌ์›Œ์ ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ๋„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ์™€ ์˜ต์…˜์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์ฃ . ๐Ÿ˜Š

5. ์—ด๊ฑฐํ˜•๊ณผ switch ๋ฌธ

์—ด๊ฑฐํ˜•์€ switch ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ํŠนํžˆ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐํ•ฉ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ˆ„๋ฝ๋œ case๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


enum TrafficLight {
    RED,
    YELLOW,
    GREEN
};

void handleTrafficLight(enum TrafficLight light) {
    switch(light) {
        case RED:
            printf("์ •์ง€!\n");
            break;
        case YELLOW:
            printf("์ฃผ์˜!\n");
            break;
        case GREEN:
            printf("์ง„ํ–‰!\n");
            break;
        default:
            printf("์ž˜๋ชป๋œ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.\n");
    }
}

์ด ์˜ˆ์ œ์—์„œ TrafficLight ์—ด๊ฑฐํ˜•์€ ์‹ ํ˜ธ๋“ฑ์˜ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. handleTrafficLight ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์‹ ํ˜ธ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹ ํ˜ธ๋“ฑ ์ƒํƒœ ๊ด€๋ฆฌ RED: ์ •์ง€! YELLOW: ์ฃผ์˜! GREEN: ์ง„ํ–‰!

์—ด๊ฑฐํ˜•๊ณผ switch ๋ฌธ์˜ ์กฐํ•ฉ์€ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐ๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ƒˆ๋กœ์šด ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ switch ๋ฌธ์—์„œ ํ•ด๋‹น case๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋งŽ์€ ์ปดํŒŒ์ผ๋Ÿฌ๋“ค์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๋Š” ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

ย 

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ TrafficLight ์—ด๊ฑฐํ˜•์— BLINKING์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค:


enum TrafficLight {
    RED,
    YELLOW,
    GREEN,
    BLINKING  // ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ƒํƒœ
};

์ด์ œ handleTrafficLight ํ•จ์ˆ˜์—์„œ BLINKING ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด, ๋งŽ์€ ์ปดํŒŒ์ผ๋Ÿฌ๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค:


warning: enumeration value 'BLINKING' not handled in switch [-Wswitch]

์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๊ด€๋ จ๋œ ๋ชจ๋“  switch ๋ฌธ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ์•Š๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์—ด๊ฑฐํ˜•๊ณผ switch ๋ฌธ์˜ ์กฐํ•ฉ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์•ˆ์ •์„ฑ์„ ๋ชจ๋‘ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ์™€ ์กฐ๊ฑด์„ ์—ด๊ฑฐํ˜•๊ณผ switch ๋ฌธ์„ ํ†ตํ•ด ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

6. ์—ด๊ฑฐํ˜•์˜ ๊ณ ๊ธ‰ ํ™œ์šฉ

์ง€๊ธˆ๊นŒ์ง€ ์—ด๊ฑฐํ˜•์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ์ด์ œ ์—ด๊ฑฐํ˜•์˜ ๋” ๊ณ ๊ธ‰์ ์ธ ํ™œ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

6.1 ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋กœ์„œ์˜ ์—ด๊ฑฐํ˜•

์—ด๊ฑฐํ˜•์€ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ ์˜ต์…˜์„ ๋™์‹œ์— ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


enum FilePermission {
    READ    = 1 << 0,  // 0001
    WRITE   = 1 << 1,  // 0010
    EXECUTE = 1 << 2   // 0100
};

int main() {
    int permissions = READ | WRITE;  // 0011
    
    if (permissions & READ) {
        printf("์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.\n");
    }
    if (permissions & WRITE) {
        printf("์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.\n");
    }
    if (permissions & EXECUTE) {
        printf("์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.\n");
    }
    
    return 0;
}

์ด ์˜ˆ์ œ์—์„œ FilePermission ์—ด๊ฑฐํ˜•์€ ํŒŒ์ผ ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ถŒํ•œ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ๊ถŒํ•œ์„ ๋™์‹œ์— ์„ค์ •ํ•˜๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๊ถŒํ•œ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ READ (0001) WRITE (0010) EXECUTE (0100)

6.2 ์—ด๊ฑฐํ˜•๊ณผ ๊ตฌ์กฐ์ฒด์˜ ๊ฒฐํ•ฉ

์—ด๊ฑฐํ˜•์€ ๊ตฌ์กฐ์ฒด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ๋”์šฑ ๊ฐ•๋ ฅํ•ด์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


enum AnimalType {
    DOG,
    CAT,
    BIRD
};

struct Animal {
    enum AnimalType type;
    char name[50];
    int age;
};

void makeSound(struct Animal animal) {
    switch(animal.type) {
        case DOG:
            printf("%s: ๋ฉ๋ฉ!\n", animal.name);
            break;
        case CAT:
            printf("%s: ์•ผ์˜น!\n", animal.name);
            break;
        case BIRD:
            printf("%s: ์งน์งน!\n", animal.name);
            break;
    }
}

int main() {
    struct Animal myPet = {DOG, "๋ฉ๋ฉ์ด", 3};
    makeSound(myPet);
    return 0;
}

์ด ์˜ˆ์ œ์—์„œ AnimalType ์—ด๊ฑฐํ˜•์€ Animal ๊ตฌ์กฐ์ฒด์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๋™๋ฌผ์˜ ํƒ€์ž…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ , ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๋ฌผ ๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜• enum AnimalType { DOG, CAT, BIRD } struct Animal { enum AnimalType type; char name[50]; int age; }

6.3 ์—ด๊ฑฐํ˜•๊ณผ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ

์—ด๊ฑฐํ˜•๊ณผ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ๋งค์šฐ ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ์ƒํƒœ ๊ธฐ๊ณ„(state machine)๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


enum State {
    STATE_A,
    STATE_B,
    STATE_C
};

typedef void (*StateFunction)();

void stateA() { printf("ํ˜„์žฌ ์ƒํƒœ: A\n"); }
void stateB() { printf("ํ˜„์žฌ ์ƒํƒœ: B\n"); }
void stateC() { printf("ํ˜„์žฌ ์ƒํƒœ: C\n"); }

StateFunction stateFunctions[] = {stateA, stateB, stateC};

int main() {
    enum State currentState = STATE_A;
    
    while(1) {
        stateFunctions[currentState]();
        // ์—ฌ๊ธฐ์„œ ์ƒํƒœ ์ „์ด ๋กœ์ง์„ ๊ตฌํ˜„
        // ์˜ˆ: currentState = nextState();
    }
    
    return 0;
}

์ด ์˜ˆ์ œ์—์„œ๋Š” ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ฐ ์ƒํƒœ์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒํƒœ ๊ธฐ๊ณ„ ๊ตฌํ˜„ STATE_A STATE_B STATE_C

์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ํ™œ์šฉ ๋ฐฉ๋ฒ•๋“ค์„ ํ†ตํ•ด ์—ด๊ฑฐํ˜•์˜ ๊ฐ•๋ ฅํ•จ์„ ๋”์šฑ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์€ ๋‹จ์ˆœํžˆ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์œผ๋กœ, ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ์™€ ๋™์ž‘์„ ์—ด๊ฑฐํ˜•์„ ํ†ตํ•ด ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ๊ฒฌ๊ณ ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ฃ . ๐Ÿ˜Š

7. ์—ด๊ฑฐํ˜•์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜์‚ฌํ•ญ

์—ด๊ฑฐํ˜•์€ ๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ํ•œ๊ณ„์™€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

7.1 ํƒ€์ž… ์•ˆ์ „์„ฑ

C์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ˆ˜ํ˜•์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋•Œ๋•Œ๋กœ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


enum Color { RED, GREEN, BLUE };
enum Fruit { APPLE, BANANA, CHERRY };

int main() {
    enum Color c = RED;
    enum Fruit f = c;  // ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋Š” ์žˆ์ง€๋งŒ, ํ—ˆ์šฉ๋จ
    
    if (f == RED) {  // ์ด๊ฒƒ๋„ ํ—ˆ์šฉ๋จ
        printf("๊ณผ์ผ์ด ๋นจ๊ฐ„์ƒ‰์ž…๋‹ˆ๋‹ค?\n");
    }
    
    return 0;
}

์ด ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ์„œ๋กœ ๋‹ค๋ฅธ ์—ด๊ฑฐํ˜• ๊ฐ„์˜ ๋Œ€์ž…์ด๋‚˜ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ„๊ทธ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

7.2 ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’ ๋ณ€๊ฒฝ

ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด์„œ ์—ด๊ฑฐํ˜•์— ์ƒˆ๋กœ์šด ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ƒ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ์—ด๊ฑฐํ˜•์„ ์ง๋ ฌํ™”ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ํ†ต์‹ ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


// ๋ฒ„์ „ 1
enum Version {
    V1,
    V2,
    V3
};

// ๋ฒ„์ „ 2 (์ƒˆ๋กœ์šด ๋ฒ„์ „ ์ถ”๊ฐ€)
enum Version {
    V1,
    V1_5,  // ์ƒˆ๋กœ ์ถ”๊ฐ€
    V2,
    V3
};

์ด ๊ฒฝ์šฐ, V2์™€ V3์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ๊ธฐ์กด ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7.3 ์—ด๊ฑฐํ˜•์˜ ํฌ๊ธฐ

C ํ‘œ์ค€์€ ์—ด๊ฑฐํ˜•์˜ ์ •ํ™•ํ•œ ํฌ๊ธฐ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” int ํฌ๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ์ด๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ด๊ฑฐํ˜•์˜ ํฌ๊ธฐ์— ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ด์‹์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด๊ฑฐํ˜• ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ ํƒ€์ž… ์•ˆ์ „์„ฑ ์„œ๋กœ ๋‹ค๋ฅธ ์—ด๊ฑฐํ˜• ๊ฐ„ ๋Œ€์ž…/๋น„๊ต ์ฃผ์˜ ์ƒ์ˆ˜ ๊ฐ’ ๋ณ€๊ฒฝ ์ƒˆ ์ƒ์ˆ˜ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ๊ฐ’ ๋ณ€๊ฒฝ ์ฃผ์˜ ํฌ๊ธฐ ๋ถˆํ™•์‹ค์„ฑ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ

์ด๋Ÿฌํ•œ ํ•œ๊ณ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์—ด๊ฑฐํ˜•์€ ์—ฌ์ „ํžˆ ๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ์˜์‚ฌํ•ญ์„ ์—ผ๋‘์— ๋‘๊ณ  ์ ์ ˆํžˆ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


enum Color color = (enum Color)RED;

๋˜ํ•œ, ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


enum Version {
    V1 = 1,
    V1_5 = 15,
    V2 = 2,
    V3 = 3
};

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ๊ธฐ์กด ์ƒ์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ด๊ฑฐํ˜•์˜ ์ด๋Ÿฌํ•œ ํŠน์„ฑ๋“ค์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ๋Œ€์‘ํ•จ์œผ๋กœ์จ, ์šฐ๋ฆฌ๋Š” ์—ด๊ฑฐํ˜•์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ฉด์„œ๋„ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ํ™œ์šฉํ•  ๋•Œ ๊ฐ ์žฌ๋Šฅ์˜ ํŠน์„ฑ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋„ ๊ฐ ๋„๊ตฌ์˜ ํŠน์„ฑ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋” ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

8. ๊ฒฐ๋ก 

์ง€๊ธˆ๊นŒ์ง€ C ์–ธ์–ด์˜ ์—ด๊ฑฐํ˜•(enum)์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์€ ๋‹จ์ˆœํžˆ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์˜ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ํฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ์—ด๊ฑฐํ˜•์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์„ ์–ธ ๋ฐฉ๋ฒ•
  • ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ๊ฐ’ ์ง€์ •๊ณผ ํ™œ์šฉ
  • ์—ด๊ฑฐํ˜•๊ณผ switch ๋ฌธ์˜ ๊ฐ•๋ ฅํ•œ ์กฐํ•ฉ
  • ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋กœ์„œ์˜ ์—ด๊ฑฐํ˜• ํ™œ์šฉ
  • ์—ด๊ฑฐํ˜•๊ณผ ๊ตฌ์กฐ์ฒด, ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๊ฒฐํ•ฉ
  • ์—ด๊ฑฐํ˜• ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค

์—ด๊ฑฐํ˜•์€ ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ์™€ ์˜ต์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋” ๋ช…ํ™•ํ•˜๊ณ , ์˜ค๋ฅ˜๊ฐ€ ์ ์œผ๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์—ด๊ฑฐํ˜•์—๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ฌธ์ œ, ์ƒ์ˆ˜ ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ ์ฃผ์˜์ , ํฌ๊ธฐ์˜ ๋ถˆํ™•์‹ค์„ฑ ๋“ฑ์„ ํ•ญ์ƒ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ๋Œ€์‘ํ•œ๋‹ค๋ฉด, ์—ด๊ฑฐํ˜•์€ ์—ฌ๋Ÿฌ๋ถ„์˜ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ ์ƒ์ž์—์„œ ์—†์–ด์„œ๋Š” ์•ˆ ๋  ์ค‘์š”ํ•œ ๋„๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์•„์ด๋””์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฐฝ์˜์ ์ธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•๊ณผ ๊ฐ™์€ ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฐฝ์˜์„ฑ์„ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฌ์ •์—์„œ ์—ด๊ฑฐํ˜•์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณด์„ธ์š”. ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ, ์˜ต์…˜ ์ฒ˜๋ฆฌ, ํƒ€์ž… ์•ˆ์ „์„ฑ ํ–ฅ์ƒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์—ด๊ฑฐํ˜•์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๊ธฐ์–ตํ•˜์„ธ์š” - ์ข‹์€ ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํžˆ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์ฝ๊ธฐ ์‰ฝ๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฌ์ •์— ์—ด๊ฑฐํ˜•์ด ํฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ™”์ดํŒ…! ๐Ÿš€

์—ด๊ฑฐํ˜•(enum)์œผ๋กœ ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”! ๊ฐ€๋…์„ฑ โ†‘ ์œ ์ง€๋ณด์ˆ˜์„ฑ โ†‘ ํƒ€์ž… ์•ˆ์ „์„ฑ โ†‘