변수는 값을 저장하기 위해 가장 넓리 쓰이기 때문에 아시겠지만 상수는 모르시는 분들이 있을 것입니다... 이 상수는 변수와 다른 차이점을 가지는데요... 가장 큰 차이점이라면 상수는 변수와 달리 한번 설정하면 readonly 읽기만 하는 자료형을 말합니다. 다시말해 한 번 설정하면 절대 변하지 않는 값입니다. 그래서 가끔은 변수의 선언보다 상수가 더 유용할 수도 있죠. 그럼 어떤 경우에 상수를 사용할까요? 일반적으로 웹페이지 안에서 변하지 않는 값들에 대하여 상수 선언을 합니다. 이 경우 아래와 같은 것들이 이에 해당하는 요소입니다.

1. 페이지 url
2. 페이지 파라미터(쿼리스트링)
3. 고객 정보 등 외부에서 입력된 값(id, password, key value)
4. 원주율 및 기타 수학 공식 등


!! 상수의 선언 방법


<script type="text/javascript">
const test = 100;
// 상수를 선언하는 방법

var test2 = 100;
// 변수를 선언하는 방법
</script>

위와 같이 const를 사용해 상수를 선언할 수 있습니다... 물론 변수라면 두번째처럼 var를 사용하여 선언합니다. 상수는 한번 선언되면 앞에 언급한 것처럼 그 값이 바뀌지 않습니다. 예를들어 아래의 예저는 처름 test 라는 상수를 1000이라고 선언하고 그 다음에는 0으로 변경하는 예제입니다. 물론 상수이기 때문에 출력된 변수의 값이 0이 아닌 1000이 되어야 할 것입니다. 아래 예제를 봐주세요.

const test = 1000;
// 초기값으로 상수 const에 1000을 설정

const test = 0;
// 다시 상수 test에 0을 설정

console.log(const.test)

1000
// 출력값으로 1000

출력결과는 예상과 같이 변경되지 않고 처음의 1000을 출력합니다.


참고로 아래와 같이 만약에 변수와 상수를 동시에 선언한다면 어떻게될까요?

var const value = "readonly";

이 경우 오류가 띄며 변수, 상수 둘 다 선언되지 않습니다.


!!! 참고하세요


상수는 절대 변하면 안되는 값이기 때문에 원주율이나 특정 공식등 변하지 않는 값을 필요로 할 때 상수로 설정하여 많이 사용됩니다. 이런 값들은 확실히 상수를 사용하는 것이 좋겠죠? 한가지 더.. 상수 설정의 const 키워드는 최신 브라우저에서는 잘 동작하나 IE 8, IE 9, IE10에서는 동작하지 않습니다. 하지만 IE11 이상에서는 잘 동작합니다.

# 생각해볼 문제... 호환성을 위해 다른 방법은 없을까?
상수가 아닌 다른 방법으로 변하지 않는 값을 설정하려면 객체의 메소드를 사용할 수도 있을 것 같습니다. 메소드는 특정 값을 반환하되 메소드의 프로퍼티는 외부에서 접근할 수 없고 get()만 존재, 즉 set()이 없다면 동일한 기능이 가능할 것입니다.