- 학습한 내용
변수란 데이터를 다루는 방법이다. 변수에는 다양한 데이터를 담을 수 있다. 쉽게 말하면 상자 안에 데이터를 담고 그 상자의 주소를 이름(Label)화 하는 것이다. 이것이 '변수'이다.
그리고 데이터를 변수로 지정하는 것을 '선언'이라고 한다. JS에서 선언은 let, const, var 이 3가지 방법이 있다. 이 3가지에는 차이가 있다. var는 JS가 취한 가장 오래된 선언 방법인데, var 선언은 호이스팅이 된다는 특징이 있다. 그러나 문제는 var는 function-scope 단위로 호이스팅이 일어나 함수 내에서의 변수가 전역 변수로 취급되기도 한다는 것이다. 그래서 이러한 문제로 생기는 오류를 막기 위해 호이스팅을 따로 막아야 하는 수고를 해야 할 때가 있다.
그래서 let과 const가 ES6 이후로 새롭게 만들어졌다. 물론 let과 const 역시 var처럼 호이스팅이 일어난다. 그러나 block-scope 단위로 호이스팅 된다. 그래서 var와 다르게 범위가 마음대로 움직이지 않고 훨씬 엄격하다. 또한 let과 const는 var와 다르게 재선언을 허락하지 않는다는 특징이 있다.
그리고 선언된 변수에 데이터를 담는 것을 '할당'이라고 한다. 할당은 할당연산자('=', 수학에서는 같다는 기호이지만 프로그래밍 언어에서는 값을 할당하라는 할당연산자이다. 같다를 표현하는 연산자는 '=='와 '==='가 있다)를 이용해 선언된 변수에 값을 할당시킨다. 즉, 상자에 이름을 붙이고 그 값을 넣는 것이다. var와 let은 재할당이 가능한데 const는 재할당 역시 불가능하다는 특징이 있다.
변수를 통해 연산을 진행할 수 있고, 변수들로 연산한 표현식을 또다시 변수로 선언할 수도 있다.
즉,
let pi = 3.141952;
let radius = 5;
let circleArea = pi * radius ** 2
이렇게 선언된 변수를 연산을 진행하는 표현식으로 만들어 다시 선언된 변수에 할당하는 것이다.
타입이란 데이터 또는 자료의 형태를 의미한다. 기본적으로 JS에서 타입은 크게 원시(기본)타입과 참조타입으로 구분된다.
원시타입에는
- 불리언(Boolean)
- Null
- Undefined
- 숫자(Number)
- 문자열(String)
이 있고 ES6 이후로
- Symbol
이 추가되었다.
참조타입에는
- 객체(Object)
- 배열(Array)
- Function RegExp
- Map
등이 있다.
- 의문점
내가 학습하며 가진 의문은 과연 선언된 변수로 만든 표현식을 다시 변수에 할당했을 때, let은 재할당이 가능하기 때문에 변수에 다른 값을 할당하면 표현식이 할당된 변수의 값이 왜 안 바뀌냐는 것이다.
예를 들어 위의 표현식에서
radius = 3;으로 재할당하면
circleArea의 값이 바뀌길 기대했지만 여전히 radius에 5가 할당된 원래 값만 반환되었다.
이유를 찾아보니 타입의 문제라는 것을 알게 되었다. JS에는 크게 2가지 타입이 있는데, 원시형과 참조형이다. 문제는 이 두 타입이 할당하는 경로에서 차이가 난다는 것이다. 참조형의 경우 내가 예상하는 경로로 움직인다. 말 그대로 참조형이기 때문이다. 즉, 원본이 바뀌면 복사본도 바뀌는 것이다. 그러나 원시자료형은 원본과 복사본이 독립적으로 분리된다. 원래의 값을 할당은 했지만 더 이상 연결되지는 않는 것이다.
그래서 나는 원시형을 참조형으로 변환하는 방법을 서치 해봤지만 딱히 결과가 나오지 않았고, 고민해보니 그리 좋은 시도가 아니라는 생각이 들었다. 그냥 내가 원하는 형태로 변수의 값이 바뀌길 원하면 변수를 매개변수로 취하는 함수로 만들면 된다는 결론을 내렸다.
'JavaScript' 카테고리의 다른 글
JavaScript 기초6 배열(Array) (0) | 2021.07.09 |
---|---|
JavaScript 기초5 반복문(iteration) (0) | 2021.06.11 |
JavaScript 기초4 문자열(string) (0) | 2021.06.09 |
JavaScript 기초3 조건문(conditional) (0) | 2021.06.05 |
JavaScript 기초2 함수(function) (0) | 2021.06.04 |