SW개발

리터럴(Literal) 상수

박종명 2023. 10. 27. 09:11
728x90
이 글은 제가 과거에 운영했던 사이트인 http://dotnet.mkexdev.net 의 글을 옮겨온 것입니다. 원본 글은 2008년 5월에 작성되었습니다.

그 전에 운영했었던 사이트(mkex.pe.kr)은 흔적도 없이 사라 졌습니다. 그속의 글들도 모두... 그래서 이 사이트도 사라지기 전에 옮기고 싶은 글을 조금씩 이 블로그로 이동시키려 합니다.
(원본글) http://dotnet.mkexdev.net/Article/Content.aspx?parentCategoryID=2&categoryID=9&ID=103

상수란 변수와는 달리 값을 변경할 수 없는 데이터를 의미한다.
 
즉 아래와 같은 코드에서
int i = 10
 
 i   : 정수형 변수
10 :  상수
 
라고 한다.
 
i 의 현재 값은 10으로 할당되었지만 프로그램 수행 과정중에 다른 정수값으로 변경이 가능하므로 i 를 (정수형) 변수라 한다.
반면, 10 은 값을 변경할 수 없기 때문에 상수인 것이다.
 
그렇다면 위의 코드의 실행 순서를 살펴보자.
대입연산자의 실행 우선순위는 우측의 결과가 먼저 실행되고 좌측으로 값이 복사된다(이 과정을 값이 변수로 assign 된다고 한다)
즉 10 이라는 것이 먼저 실행되고 i 에 10이 복사된다는 것이다.
 
그럼 우측이 실행된다는 의미는 무엇일까?
연산자의 우측에는 10이라는 숫자가 있을 뿐이다.
 
이 말은 10 이 먼저 메모리에 올라간다는 뜻이다.
컴퓨터의 CPU 는 메모리에 존재하는 데이터들만 연산할 수 있다.
(우리가 작성하는 응용프로그램 역시 실행시에는 메모리에 로드 된다는 것을 알고 있다)
따라서 10 이라는 숫자가 내부적으로 먼저 메모리에 로드되고 난 후 i 라는 변수에 복사가 되는 것이다.
 
이렇게 특정 메모리에 10 이라는 정수값이 할당이 되었지만 이 메모리 공간의 이름은 부여되지 않았다.
즉, 메모리할당이 되어 상수가 저장되었으나 그 공간에 이름이 없는 상수를 리터럴(literal) 상수라고 한다.

그림에서 보면 위의 10이라는 메모리 공간은 i 라고 이름이 부여되었다. 그러나 아래쪽의 메모리 공간은 10이라는
값을 저장하고는 있지만 이 공간에 대한 이름은 부여되지 않았다.  단지 숫자 10 이 메모리에 저장된것 뿐이다. 
이렇듯 이름이 없는 상수를 가리켜 리터럴(literal) 상수라 한다.

이와 반대로 이름이 부여된 상수는 심볼릭(Symbolic) 상수라 한다.
아래의 코드를 보자
const int i = 10;
 
const 라는 키워드를 사용하여 상수를 정의하고 있다.
이것은 상수이지만 이름이 있으므로 심볼릭(Symbolic) 상수라 한다.