1) 변수(Variable): 값을 수정할 수 있는 객체
2) 상수(Constant): 값을 수정할 수 없는 객체
상수의 값은 컴파일러에 의해 수정이 방지되기 때문에 수정을 시도할 시 컴파일 오류가 발생합니다.
따라서 프로그램 실행 중 데이터가 변하면 안되는 경우 상수로 데이터를 저장합니다.
1) const
const int constantNumber = 0;
2) 상수식
3) 상수식이 될 수 없는 예시
→ 이와 같이 변수는 프로그램 상황에 따라 변경될 수 있는(런타임에 계산되는) 수이기 때문입니다.
→ 사람의 눈에는 변수에 저장하려는 10이라는 수가 확정된 수로 보이지만, 상수와 변수의 컴파일 방식 자체가 다르기 때문에 변수를 상수에 대입하는 것이 불가합니다.
4) 상수식이 될 수 있는 예시
컴파일러가 할 수 있는 간단한 연산
→ num7과 같은 간단한 연산은 컴파일 수준에서 가능하기에 상수로 저장할 수 있다.
→ num8 또한 컴파일 타임에 계산 가능한 수를 대입하는 것이기에 가능합니다.
숫자, 문자열, boolean, null
const int SPEED_OF_LIGHT = 299792458; // 수
const string WELCOME_MESSAGE = "Greetings!"; // 문자열
const bool IS_WINDOWS = true; // 불리언
const string NULL_OBJECT = null; // 널
→ 숫자뿐만 아니라 문자열, boolean, null 또한 상수로 사용할 수 있습니다.
1) 위와 같이 무엇을 의미하는지 명확하지 않은 데이터를 의미
2) 매직넘버는 코드를 보는 사람에 따라 해석이 달라질 수 있음
3) 매직넘버를 사용하는 것도 하드코딩의 일종으로, 매직넘버를 발견하고 그를 적절히 기호상수로 바꿀 수 있어야 함
1) 상수에 이름을 붙여 명확히 어떤 의미의 데이터인지 표시한 것
2) 예시의 상수로 저장된 수가 빛의 속도라는 것을 명확히 표시할 수 있음
3) 매직 넘버의 예시와 같은 수이지만, 코드를 확인하는 사람들이 다른 의미로 해석할 확률을 줄일 수 있음
1) 관련있는 여러 기호 상수를 묶는 타입
2) 범용적인 int 등의 타입 대신 열거형(그룹)의 이름으로 관리하기에 코드의 가독성을 높이고, 구체적으로 데이터를 나타낼 수 있음
3) 저장할 수 있는 데이터가 한정되어 있기에 오류가 감소
enum 그룹의 이름
{
// 그룹의 멤버
}
1) 멤버의 타입은 기본적으로 정수(int)
2) 멤버의 값
멤버의 값을 지정하지 않으면 첫번째 멤버가 0, 그 이후는 (이전 멤버 + 1)이 됨
값을 직접 지정할 수도 있음
→ 이 경우 지정하지 않은 값은 (이전 멤버 + 1)
1) 멤버의 값을 int로 사용하기
2) int를 이용해 열거형 객체의 멤버 사용하기
1) 특정 비트가 1일 때의 의미를 나타내기 위한 상수의 모음
2) 논리연산으로 다른 멤버를 선언할 수 있음