6. const
프로그래밍을 하다보면 const를 자주 보게 된다.
const는 상수를 만들 때 사용한다.
몇몇 스타일 가이드에서는 변수를 선언할 때 let 보다 const 키워드로 선언하는 것을 권장한다.
????왜일까????
const의 가장 큰 특징은 재할당이 불가능하다는 것이다.
이러한 특성 때문에 원래 const는 상수를 만들 때의 키워드로 사용된다.
검색창의 키워드를 입력할 때를 생각해보자.
키워드는 항상 변하기 때문에 변수이다.
하지만 검색 기능이 동작하는 시점에서는 이 키워드는 상수이다.
즉, 코드가 동작하는 순간에는 키워드가 변하지 않는 상수로 사용된다는 이야기이다.
이런 것처럼 코드가 동작하는 순간에는 변수가 아니라 상수로 사용되는 값들이 꽤 많다.
또한 코드에서 변수가 많을 수록 일관성을 유지하기가 힘들고 코드의 전체 흐름에도 영향을 끼치게 된다.
그래서
코드를 좀 더 일관되게, 안전하게 사용하기 위해 const 키워드로 변수를 선언하라고 권장하는 경우가 많아진 것이다.
그럼 똑같이 const로 변수와 상수를 선언하면 어떻게 이 둘을 구분할 수 있을까?
변수와 상수는 이름을 짓는 방식에서 구별이 가능하다.
변수 이름은
소문자로 시작하고 여러 단어가 조합될 때에는 캐멀 작성법을 이용한다.
상수 이름은
대문자로 쓰고여러 단어가 조합될 때에는 밑줄( _ )로 연결한다.
const를 사용할 때 주의할 점!
객체는 변수의 주소값이 저장된다.
할당 연산자로 값을 변환하면 값을 재할당하는 것처럼 오해할 수 있다.
//const로 x를 선언했지만 x에 값을 추가하거나 삭제 가능!
const x = { name: 'Yunju'};
x.birth = 1989;
하지만 객체의 프로퍼티 값이 변경될때 또는 배열의 요소 값이 변경될 때에는
변수가 가진 주소값을 변환하는 것이 아니기에 const 키워드로 변수를 선언했다고 하더라도
변수의 값이 충분히 변할 수 있다.
예시를 살펴보자!
//const로 team2 선언!
1 let team1 = ['Drum', 'guitar', 'vocal'];
2 const team2 = team1;
3
4 team1.splice(2, 1, 'violin');
5 team2.splice(2, 1, 'Piano');
6
7 console.log(team1);
8 console.log(team2);
결과는 어떻게 나올까?
let 키워드로 변수 team1을 선언하고, 배열하나를 할당했다. 그리고 2번 줄에서 const 키워드로 변수team2를 선언하고, team1을 할당했다.
배열은 참조형 값이기 때문에, 이때 주소 값이 복사되어서 일단 team1과 team2는 서로 같은 배열을 가리키게 된다.
4번 줄에서 splice메소드를 통해 team1의 2번 인덱스에 있는 값을 'vocal' 으로 수정했다.
그러면 현재까지, team1과 team2가 함께 가리키는 배열의 모습은 [ 'Drum', 'guitar', 'vocal' ]이다.
5번 줄에서는 const키워드로 선언한 변수 team2의 값을 변경하고 있다.
중요 포인트!!!!→ const로 변수를 선언하게 되면 값을 재할당할 수 없지만, 할당된 값이 객체나 배열일 경우 메소드를 통해서 그 값을 변경할 수가 있다!!!!
그렇기 때문에 제시된 코드는 아무런 Error 없이 실행되서, 2번 인덱스 값이 'Piano'로 변경
결국 team1과 team2모두
[ 'Drum', 'guitar', 'vocal' ] 이 출력된다!!!