<22.12.28. (수) - 상수>
▶변수와 상수
변수를 사용하면 값을 변경할 수 있습니다.
int a = 10;
a = 11; // 정상
상수를 사용하면 값을 변경할 수 없습니다.
const int b = 10;
b = 15; // 오류
▶ 기호 상수
상수는 데이터가 변경되는 것을 막고자 할 때 사용하면 되는데, 많이 쓴는 사례가 바로 기호 상수(symbolic Constant)입니다.
어떤 의미를 가지는지 모르는 값을 마법의 숫자라고 하며 코드의 가독성을 매우 떨어뜨립니다. 따라서 되도록 마법의 숫자 대신 이름을 붙여 가독성을 높이도록 합니다. 이를 상수에 이름을 붙였다 하여 기호 상수라고 합니다.
▶const
키워드 중에 '한정자'가 있습니다. 한정자를 붙이면 기능에 제한이 생깁니다. 상수를 만들때 사용하는 한정자는 const입니다.
const는 객체에만 사용할 수 있으며 타입 전에 붙이면 된다.
const int kimdoikBirthday = 0516;
int kimdoikAge = 26;
const int kimdoikAgeNextYear = kimdoikAge; // 오류입니다.
const는 오직 상수만 가능합니다.
상수식이 가능한 경우는 수, 문자열, 불리언, 널 이 있습니다.
const int kimdoikBirthday = 0516;
const stirng kimdoikname = "kimdoik"
▶열거형(enum)
관련 있는 여러 기호 상수를 묶기 위한, 그룹화 시키는 도구입니다.
const int DIRECTION_LEFT = 1;
const int DIRECTION_RIGHT = 2;
const int DIRECTION_UP = 3;
const int DIRECTION_DOWN = 4;
int playerDirection;
playerDirection = DIRECTION_LEFT
playerDirection = DIRECTION_RIGHT
playerDirection = DIRECTION_UP
playerDirection = DIRECTION_DOWN
// 이렇게 저장되어 있는 기호상수를 enum으로 묶으면 편합니다.
// 아래 예시를 보면 이해가 쏵 됩니다.
열거형도 타입이기 때문에 객체의 타입으로 지정할 수 있습니다.
예를 들어 범용적인 의미를 가진 int 대신 Direction이라는 타입으로 지정하면서 좀 더 구체적으로 데이터를 나타낼 수 있고, 저장할 수 있는 데이터가 정해져 있기 때문에 오류가 줄어듭니다.
enum Direction
{
None,
Left,
Right,
Up,
Down
}
static void Main(){
Direction playerDirection = Direction.None;
}
TIP
enum은 타입입니다!! 무턱대고 비슷한 기호 상수가 있다고 묶는다면 오히려 가독성을 떨어뜨릴 수 있습니다.
타입은 int a = 10;에서 int가 타입입니다.
위에서 Direction playerDirection = Direction.None;에서 Direction은 enum의 타입입니다.
enum은 타입이라는 점을 절대 잊어선 안됩니다!!
문법
내부 멤버의 값을 지정해주지 않으면 자동적으로 정해집니다.
첫번째 멤버는 자동으로 0이 되고 다음 멤버는 +1 추가됩니다.
enum Color
{
Red, // 첫 번째 멤버는 0이다.
Green, // 두 번째 멤버부터는 이전 멤버의 값 + 1이다.
Blue
}
각 멤버마다 값을 따로 저장할 수 있습니다.
멤버 타입과의 변환이 가능합니다.
암시적 변환이 불가능합니다.
int playerDirection = (int)Direction.Left;
만약 Limit.Map_Max_X가 byte형식으로 변환이 불가능하다. 라는 오류 메시지를 보면 (int)Limit.Map_Max_X으로 써주면 사용 가능하다.
▶비트 플래그
어떤 비트가 1일 때의 의미를 나타내기 위한 상수의 모음을 비트 플래그라고 합니다.
열거형으로 비트 플래그를 표현할 수 있습니다.
[Flags] // 이건 Attribute인데, 나중에 배운다.
enum Days
{
None = 0b_0000_0000, // 0
Monday = 0b_0000_0001, // 1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday,
WeekDays = Monday | Tuesday | Wednesday | Thursday | Friday
}
TIP
프로그래밍 언어 : 컴퓨터가 아닌 사람이 아닌 사람이 알아듣는 언어
Build : 프로그램을 만드는 과정. Build는 여러과정으로 나뉘는데 그 과정중 하나는 컴파일도 있다.