[C++]5. Enum값 사용하기
안녕하세요 고급 개발자가 꿈인 코린이 입니다.
오늘은 Enum값을 사용하는 방법에 대해 설명드리겠습니다.
Enum값을 사용하는 이유는 프로그램을 개발하다보면 여러 개발자가 여러기능을 담당해서 만드는 경우가 많습니다.
그리고 그기능을 개발하는 개발자가 중간에 바뀌는 경우도 아주 많습니다.
이렇게 개발자들이 많이바뀌고 개발한 내용을 여러 개발자들이 보게 되는데
예를 들어 if문의 어떠한 정수형을 비교를 한다고 칠때
if(a == 0)이것과 if(a == SUNDAY)와 어떠한 것이 더 보기가 편할까요??
당연히 후자의 코드가 훨씬도 보기 좋고 처음 보는사람입장에서도 a라는 값이 일요일일때 어떠한 동작을 하는구나
라고 알수 있습니다.
전자처럼 a == 0이라는 것을 보면 0이 무슨뜻이지 하고 개발했던 내용과 시나리오를 다 찾아보면서 뒤늦게 0이라는게
일요일을 뜻하는 것이라고 알게 됩니다.
이렇게 다른사람이 봤을때도 한눈에 알아볼수있게 하는 코딩도 프로그래머로써 아주 중요한 역량중에 하나입니다.
그리고 위와같은 코드를 몇달뒤나 몇년뒤에 코드를 수정해야되서 보게 되더라고 한눈에 할아볼수 있다는 것입니다.
그렇기 때문에 실무에서는 거의 모든 정수값을은 enum값을 쓰거나 따고 define해서 보기쉽게 코딩을 합니다.
아래의 예제를 보겠습니다
enumtest.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#ifndef SERVICECLASSCECLASS_H
#define SERVICECLASSCECLASS_H
#include <iostream>
using namespace std;
enum WEEK{
SUNDAY = 0,//0은 써도되고 안써도 된다.
MONDAY,//밑에있는 수들은 첫번째 설정한 값에서 1씩 추가되어 설정된다.즉 MONDAY는 1이된다.
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
class ServiceClass
{
public:
ServiceClass();
virtual ~ServiceClass();
void dailySchedule(int week);
private:
int mValue1;
int mValue2;
public:
};
#endif // SERVICECLASSCECLASS_H
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
enumtest1.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include "ServiceClass.h"
ServiceClass::ServiceClass()
{
mValue1 = 0;
mValue2 = 0;
dailySchedule(SUNDAY);//함수에 숫자대신 enum값을 넣어도 된다.
dailySchedule(2);
dailySchedule(6);
}
ServiceClass::~ServiceClass()
{
}
void ServiceClass::dailySchedule(int week)
{
switch(week){
case SUNDAY:
cout << getSchedule(week) << endl;
break;
case MONDAY:
cout << getSchedule(week) << endl;
break;
case TUESDAY:
cout << getSchedule(week) << endl;
break;
case WEDNESDAY:
cout << getSchedule(week) << endl;
break;
case THURSDAY:
cout << getSchedule(week) << endl;
break;
case FRIDAY:
cout << getSchedule(week) << endl;
break;
case SATURDAY:
cout << getSchedule(week) << endl;
break;
default:
cout << "work day" << endl;
break;
}
}
string ServiceClass::getSchedule(int week)
{
switch(week){
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "workday";
break;
case SUNDAY:
case SATURDAY:
return "hollyday";
break;
default:
return "workday";
break;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
enumtest2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include "ServiceClass.h"
ServiceClass::ServiceClass()
{
mValue1 = 0;
mValue2 = 0;
dailySchedule(SUNDAY);
dailySchedule(2);
dailySchedule(6);
}
ServiceClass::~ServiceClass()
{
}
void ServiceClass::dailySchedule(int week)
{
switch(week){
case 0:
cout << getSchedule(week) << endl;
break;
case 1:
cout << getSchedule(week) << endl;
break;
case 2:
cout << getSchedule(week) << endl;
break;
case 3:
cout << getSchedule(week) << endl;
break;
case 4:
cout << getSchedule(week) << endl;
break;
case 5:
cout << getSchedule(week) << endl;
break;
case 6:
cout << getSchedule(week) << endl;
break;
default:
cout << "work day" << endl;
break;
}
}
string ServiceClass::getSchedule(int week)
{
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:
return "workday";
break;
case 0:
case 6:
return "hollyday";
break;
default:
return "workday";
break;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
위의 enumtest2.cpp와 enumtest1.cpp 소스코드를 보자 enumtest2.cpp는 enum을 안쓴 코드이고
enumtest1.cpp는 enum을 쓴코드이다.
한눈에봐도 enumtest1.cpp가 보기도 좋다. enumtest2.cpp에서는 case문에 모두 숫자를 표현해서
그 숫자가 어떠한 것을 의미하는지 알수가 없지만 enumtest1.cpp에서는 각 숫자가 의미하는 뜻을
한눈에 이해할수 가 있습니다. 그래서 코드의 디버깅 차원에서 enum값을 실무에서 많이 씁니다.
그래야 구지 문서등을 안봐도 이코드가 어떻게 돌아가는지 알수있기 때문입니다.
그리고 enum값을 많이 쓰는 이유중에 또 한가지로는 위의 숫자값이 만약 바뀌었을때 예들들어 아래와 같이
숫자가 12부터 시작이 된다 했을때 위의 enumtest2.cpp에서는 모든 숫자들을 바꿔줘야하지만
enumtest1.cpp에서는 enum값만 아래처럼 꿔주면 된다. 맨위에 값만 바꿔주면 알아서 1이 추가되어서 값들이
설정 됩니다.
enum WEEK{
SUNDAY = 12
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
};
이렇게 코드 수정 차원에서 enum값을 사용하는 것이 더욱 실용적이고 가독성도 높아진다.
그래서 enum값은 초보 개발자들이 사용해야할 필수적인 것중에 하나입니다.
여기까지 enum값에 대한 설명을 마치겠습니다.
감사합니다.
'C++ > C++심화' 카테고리의 다른 글
[C++]7. vector 사용하기(vector에서 중간 원소 삭제하기) (0) | 2019.08.17 |
---|---|
[C++]6. vector 사용하기(구조체 vector사용 하기) (0) | 2019.07.14 |
[C++] 4. null 과 nullptr의 차이점 (0) | 2019.06.09 |
[C++] 3. 변수 이름 및 함수 이름 코딩 룰에 맞게 설정하기(카멜 표기법,파스칼 표기법) (0) | 2019.06.08 |
[C++] 2. call by value 와 call by reference의 차이 (0) | 2019.06.07 |