๐ C ์ธ์ด์ ์ด๊ฑฐํ(enum) ์๋ฒฝ ๊ฐ์ด๋ ๐

์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ์ค๋์ C ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ธ ์ด๊ฑฐํ(enum)์ ๋ํด ๊น์ด ์๊ฒ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ด๊ฑฐํ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ด ๊ธ์ ํตํด ์ฌ๋ฌ๋ถ์ ์ด๊ฑฐํ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๊ณ ๊ธ ํ์ฉ๋ฒ๊น์ง ๋ชจ๋ ๋ง์คํฐํ ์ ์์ ๊ฑฐ์์! ๐
ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ์์ ์ง์๊ณผ ๊ธฐ์ ์ ๊ณต์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท(https://www.jaenung.net)๊ณผ ๊ฐ์ ํ๋ซํผ์์ ๋ค์ํ ์ฌ๋ฅ์ ๊ฑฐ๋ํ๋ฏ์ด, ์ฐ๋ฆฌ๋ ์ด ๊ธ์ ํตํด C ์ธ์ด์ ์ด๊ฑฐํ์ ๋ํ ์ง์์ ๋๋๊ณ ์ ํฉ๋๋ค. ์, ๊ทธ๋ผ ์์ํด๋ณผ๊น์?
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
์ ํด๋นํ๋ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
์ด ์์์์ ๋ณผ ์ ์๋ฏ์ด, ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ์ง๊ด์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค. '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
์ด๋ ๊ฒ ์ด๊ฑฐํ ์์์ ํน์ ๊ฐ์ ์ง์ ํ๋ฉด, ํ๋ก๊ทธ๋จ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋ ์ ์ฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ ํ๋์ ๋งคํํด์ผ ํ๋ ๊ฒฝ์ฐ๋, ๊ธฐ์กด ์์คํ ๊ณผ์ ํธํ์ฑ์ ์ํด ํน์ ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์์ฃ . ๐
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
ํจ์๋ ์ ํ๋ ์ต์
์ ๋ฐ๋ผ ์ ์ ํ ๋์์ ์ํํฉ๋๋ค.
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
ํจ์๋ ํ์ฌ ์ํ์ ๋ฐ๋ผ ์ ์ ํ ๋์์ ์ํํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด, ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๋ํ, ์๋ก์ด ์ํ๋ ์ต์ ์ ์ถ๊ฐํ๊ธฐ๋ ์ฌ์์ ธ ์ ์ง๋ณด์์ฑ๋ ํฅ์๋ฉ๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์ฝ๊ฒ ์ฐพ๊ณ ํ์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ, ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ ๋ค์ํ ์ํ์ ์ต์ ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ฃ . ๐
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
ํจ์๋ ํ์ฌ ์ ํธ์ ๋ฐ๋ผ ์ ์ ํ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ด๊ฑฐํ๊ณผ 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
์ด๊ฑฐํ์ ํ์ผ ๊ถํ์ ๋ํ๋ด๋ ๋นํธ ํ๋๊ทธ ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ๊ถํ์ ์๋ก ๋ค๋ฅธ ๋นํธ ์์น๋ฅผ ์ฐจ์งํ๋ฏ๋ก, ์ฌ๋ฌ ๊ถํ์ ๋์์ ์ค์ ํ๊ณ ํ์ธํ ์ ์์ต๋๋ค.
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
๊ตฌ์กฐ์ฒด์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๋๋ฌผ์ ํ์
์ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํ๊ณ , ํ์
์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ์ํํ ์ ์์ต๋๋ค.
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;
}
์ด ์์ ์์๋ ์ด๊ฑฐํ์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์ ์ํ๊ณ , ๊ฐ ์ํ์ ํด๋นํ๋ ํจ์๋ฅผ ํจ์ ํฌ์ธํฐ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ์ฌ ์ํ์ ๋ฐ๋ผ ์ ์ ํ ํจ์๋ฅผ ์ฝ๊ฒ ํธ์ถํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ ๊ธ ํ์ฉ ๋ฐฉ๋ฒ๋ค์ ํตํด ์ด๊ฑฐํ์ ๊ฐ๋ ฅํจ์ ๋์ฑ ๊ทน๋ํํ ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ ๋จ์ํ ์์๋ฅผ ์ ์ํ๋ ๊ฒ ์ด์์ผ๋ก, ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ํฐ ๋์์ ์ค๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๋ถ๋ฅํ๊ณ ํ์ฉํ๋ ๊ฒ์ฒ๋ผ, ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ค์ํ ์ํ์ ๋์์ ์ด๊ฑฐํ์ ํตํด ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ฃ . ๐
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 ํ๋ก๊ทธ๋๋ฐ ์ฌ์ ์ ์ด๊ฑฐํ์ด ํฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์ดํ ! ๐
๊ด๋ จ ํค์๋
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ