티스토리 뷰

프로그래밍이 익숙해지고 점점 더 다른 사람들이 작성한 코드도 살펴보기 시작하면 어느 순간부터는 상수를 만들 때 배웠던 const 키워드를 더 자주 보게 될 것입니다.

실제로 몇몇 스타일 가이드에서는 변수를 const 키워드로 선언하라고 권장하고도 있습니다.

분명 상수를 만들 때 사용한다고 배웠었는데 왜 변수 선언에 let이 아니라 const를 사용하라는 걸까요?

일단 const와 let의 가장 큰 차이를 보면 바로 재할당이 불가능하다는 건데요.

 

이 코드를 보면 let으로 선언한 변수는 재할당이 가능하기 때문에 계속해서 값을 바꿀 수 있지만 const로 선언한 다음에 새로운 값을 할당하려고 하면 오류가 발생합니다. 

let x = 1;
console.log(x);
x = 2;
console.log(x);

const y = 3;
console.log(y);
y = 4;
console.log(y);

그래서 이런 특성 때문에 일반적으로 PI와 같이 변하지 않는 고정된 값을 사용할 때 const 키워드로 상수를 만듭니다. 그런데 아이러니하게도 영어로는 constant, 그리고 항상 상과 셈 수라는 한자를 사용해서 상수를 위해 태어난 키워드 const로 영어로는 variable, 그리고 변할 변과 셈 수라는 한자를 사용하는 변수를 만든다는게 이상하게 느껴질 수도 있습니다.

하지만 여기서 우리는 조금 다양한 관점으로 이 언어의 의미를 해석할 필요가 있습니다. 

 

간단하게 예를 들어서 우리가 검색 기능을 개발한다고 생각해봅시다. 그러면 당연히 검색창에서 키워드를 입력받겠죠?

그런데 검색창의 입장에서 입력되는 키워드는 항상 일정하지가 않고 누가 어떤 키워드로 입력할지 아무도 알 수가 없습니다. 셀 수 없이 많은 경우의 수로 변하기 때문에 이 키워드 부분은 변수인 것입니다.

 

하지만 결국 검색 버튼을 눌러서 정보를 검색하는 동작을 수행할 때는 중간에 이 키워드 값이 변할 일이 없습니다. 왜냐하면 이 키워드를 기준으로 필요한 정보를 찾아야 하기 때문입니다.

결국 검색 기능이 동작하는 시점에서는 이 키워드가 상수라고 볼 수도 있습니다.

 

사실 대부분의 서비스나 프로그램들은 이렇게 날씨, 날짜 혹은 사용자의 입력값에 따라 상대적으로 다양한 변수들이 존재하면서도 코드가 동작하는 순간에는 결국 상수로 쓰이는 경우가 더 많습니다. 

참고로 우리가 작성하는 코드 속에 변하게 되는 값이 많을수록 코드의 일관성을 유지하기가 어렵습니다.

 

이렇게 변수에 값들이 재할당되면 그 시점을 기준으로 재할당 이전의 변수와 이후의 변수의 값이 서로 다르기 때문에 코드의 전체적인 흐름에도 영향을 미치게 됩니다. 코드가 짧을 때는 큰 문제가 되진 않지만 많은 양의 코드를 작성한 경우에는 나중에 각 변수들이 어떤 값을 가지고 있을지 혼란스러워질 수도 있습니다.

let x = 3;
let y = x + 2;

console.log(x);
console.log(y);

x = 4;
console.log(x);

y = x * y;
console.log(y);

뿐만 아니라 실제로 값이 변하지 않더라도 언젠가 변할 수 있다는 가능성은 코드를 읽는 사람의 입장에서는 이 값이 언제 바뀔지 모르는 불안요소로 적용할 수 있기 때문에 어느 순간부터 코드를 조금 더 일관되게 그리고 안전하게 작성하고자 하는 취지에서 const 키워드로 변수를 사용하기 시작한 것입니다.

 

변수와 상수는 키워드 뿐만 아니라 이름을 짓는 방식으로도 구분할 수가 있습니다. 

변수 이름은 기본적으로 영어 소문자로 작성하고 여러 단어들이 조합될 때는 두번 째로 오는 단어부터는 각 단어의 첫문자를 대문자로 표기하는 방식으로 상수 이름은 기본적으로 영어 대문자로 작성하고 여러 단어들이 조합될 때는 밑줄로 단어들을 구분합니다.

 

마지막으로 주의할 점은 객체는 변수의 주소값이 저장되는데 메소드로 변경하는 것은 그렇다 치더라도 할당 연산자로 값을 변경하면 값을 재할당하는 것처럼 오해할 수가 있습니다. 하지만 객체 프로퍼티나 배열의 요소들이 변경되는 경우는 변수가 가진 주소값을 변경하는 게 아니기 때문에 const 키워드로 변수를 선언했다고 하더라도 변수의 값이 충분히 변할 수도 있습니다.

const x = {name: 'Codeit'};
x.birth = 2017;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함