es6의 const 와 let

const 와 let 의 차이는 뭘까?

김도연
5 min readNov 8, 2018

간략하게 둘의 공통점과 차이점을 나열하면 아래처럼 말 할 수 있다.

공통점 : 재선언이 불가능하다

차이점 : let 은 재할당이 가능하지만, const 는 재할당이 불가능하다

그렇다면 const 와 let 은 어떤 식으로 쓰이고 이해될까?

카페인이 필요하다

누군가 위 코드를 보면 coffee와 caffeine은 재할당되는 변수라고 생각 할 것이다. 하지만 다른 부분에서 재할당이 없다면?

let 보다는 const 를 쓰는 편이 좋다.

왜?

예상치 못한 변수의 변경으로 인한 버그가 발생할 수 있기 때문이다.

함수형 프로그래밍에서 변경가능한 상태를 모두 변경불가능한 상태로 만들어 side-effect 를 막는 것 처럼, 자바스크립트에서도 변하는 부분을 최소화 시켜주는 편이 좋다. 따라서 위 코드도 재할당이 없다면 const 를 사용하는 것이 좋다.

그러면 어떤 식으로 const를 사용하면 좋을까?

1. const 를 기본으로 사용

2. 재할당이 필요한 경우에만 let 을 사용

3. var 는 ES2015에서는 사용하지 말자

여기서 하나 더 궁금한게 떠오른다.

재할당 및 재선언이 불가능한 const 는 immutable 한 것일까?

const 는 불변인가

사과는 빨개 빨가면 현아

const 로 선언한 apple에 할당된 값은 절대 변하지 않는다. 한번 red 가 할당되면 blue로 바꿀 수 없다.

하지만 이것이 constant 하거나 immutable 함을 의미하지는 않는다. 아래의 예를 보자.

아무것도 없었다가 뭐라도 들어온 나의 두뇌

const myBrain 에 할당된 오브젝트에 key-value 가 추가되고 변경되었다. 아래도 마찬가지다.

위시리스트 참 소박하다

const 변수에 할당된 값은 절대 바뀌지 않는다면서 왜 이런일이 벌어진걸까?

왜냐하면 자바스크립트에서 변수에 오브젝트가 할당될 때는 오브젝트 자체가 아니라 오브젝트를 가리키는 주소가 할당된다.

수수깨끼는 모두 풀렸어.

const 에 할당된 것은 오브젝트가 아니라 그 주소였다.

const 변수에 할당된 것은 오브젝트의 주소다. 이것은 재할당되지 않고 불변한다. 그러나 오브젝트는 const 에 바인딩 되는 것이 아니기에 당연하게도 변경이 가능하다.

const 의 사용이 모든걸 해결해 줄까?

그렇지는 않은 듯 하다.

왜 변수는 나쁜가

위 링크의 글을 읽어보면 변수의 사용 자체가 좋지 않은 프로그램 습관이라고 말하고 있다.

소프트웨어의 복잡성은 상태(state)에 있고, 좋은 프로그래밍은 결국 상태를 효과적으로 관리하는 방법을 찾는 겁니다. 객체지향 프로그래밍은 캡슐화(encapsulation)를 통해 서로 연관된 상태를 한 곳에 모아서 상태 관리의 복잡성을 줄이고, 함수형 프로그래밍은 불변 데이터 타입(immutable data type)을 통해 아에 상태를 만들지 않거나, 모나드와 같은 수학적인 구조를 이용해 상태를 효과적으로 제어합니다.

const 가 모든 변수를 통제하지는 못하지만 var 를 사용하는 것 보다는 나은 방법인 것 같다. 애초에 변경가능한 부분을 최소화 하는 것이 조금 더 근본적인 해결방법이 아닐까 생각한다.

자세한 내용은 위 링크 ‘왜 변수는 나쁜가’를 참고하기 바란다.

--

--

김도연
김도연

No responses yet