본문 바로가기
Web/JavaScript + TypeScript

[JS] 변수와 상수

by Pretty Garbage 2022. 6. 20.

언어에 있어서 늘 1장에 나오는 것은 변수, 자료형, 뭐 이런 것들...

크게 다르지 않을거라고 생각합니다. JS 자체의 스크립트 언어 뭐 이런 특성들은 도큐먼트라던가 참조할만한 곳들이 많아서

설명은 생략합니다.

 

다른 블로그나 요약본에 변수라는 단어의 정의를 잘 내렸겠지만 간단하게

 

내가 생각하는 변수

위 이미지 처럼 비커에 무언가 담아두고 네임택에 붙여놓는 것! 즉 저 비커 자체가 변수라고 생각을 하고 있고

초심자들이나 과외 학생들에게 가르친 경험이 있다.

실제로 비커를 하나 갖고와서 배치하는 것자체가 공간을 차지하는 행위이고 (메모리 관점에서)

이 비커에는 정수형만 받기로 했는데 실수가 들어오거나 다른 자료형이 들어오면 경고문을 띄어주기도 한다.

 

주의점이 있다면 이름을 아무거나 막지을 수 있다곤 하지만 ide에서 예약어로 잡힌 예약어들은 '이름'으로서

사용할 수 없다. 예를 든다면 class, function, alert 뭐 이런 것들??

 

name = "pretty garbage"; //변수선언
age = 18; //역시 선언
//특징 javascript는 자료형을 굳이 명시하지 않아도 된다! 장점이자 단점...

alert(name); //팝업창으로 알림을 띄운다.
console.log(age); //콘솔창에 출력한다.

다만 위와 같이 변수를 선언하게 된다면 다른 작업자가 똑같은 이름으로 변수 선언을 했을 때 이슈가 있다고 합니다.

**마지막에 선언한 곳으로 덮어씌워진다.**

 

사실 이건 다른 컴파일 언어에서는 두번 같은 이름으로 선언하게 되면 에러를 띄우기 때문에 전혀 생각도 못했던 부분입니다만

그렇다면 어쨌든 이를 어떻게 방지할 것이냐!?

 

let name = "Pretty Garbage";

let name = "Normal Garbage"; //1번째 줄에서 이미 선언을 했기 때문에 에러

name = "Higest Garbage"; //평범하게 변수내에 값을 수정 가능

//즉 최초에 변수를 선언할 때 let을 붙여주면 중복 이름 변수 선언을 방지할 수 있습니다.

 

하지만 개발을 하다보면 상수 영역의 데이터를 선언할 일이 생깁니다.

주로 저의 경우는 스트링 키값이나 리미트 걸어놓는 값... 그 외에 써본적은 잘 없네요. 기억이 안나는건지 여튼 쓰긴 씁니다.

 

변수는 비커를 빗대어서 설명했지만 상수는 그 비커에 담겨진 내용물을 뚜껑을 닫아서 포장! 까지 해버린 단계로 표현하겠습니다.

 

최초에 초기화를 진행하면 그 이후 프로그램 내부에서 상수에 접근해서 수정이 불가능합니다. 

 

const URL = "Http://naver.com"; 
const MAX_COUNT = 50; //이런식으로 선언하면 됩니다.

 

컴파일러 언어를 사용하다가 오신 분들에겐 아니 자료형은 왜 선언하지 않아???라고 의문을 갖을 수 있습니다.

주석에도 적었지만. 자바스크립트는 제가 알기론 추론해서 해당 데이터 값에 맞는 자료형으로 선언이 되어집니다.

이게 장점이자 단점인데 알아서 추론해서 자료형을 선언해준다고? 개편하자나!? 응 깊이가 깊어질 수록 복잡해져-

 

예를 들자면 아래와 같습니다.

let a = 10;
a = true; //ㅇㅇ??? 정수형 자료형 아니었어? 갑자기 boolean형?

그리고 저게 됩니다... ㅠㅠ 혼란하다 혼란해! 그래서 이를 보완하고 더 상위 개념이라고 할 수 있는 타입 스크립트라는 것이 나왔고!

이를 공부하고자 자바스크립트 기초 공부 포스팅을 하게 되었습니다.

 

 

//요약
//변수 선언은 let
let name = "Jin";

//상수 선언은 const
const name = "Jin";

'Web > JavaScript + TypeScript' 카테고리의 다른 글

[JS] 비교 연산자 및 조건문  (0) 2022.06.29
[JS]형변환(Casting)  (0) 2022.06.22
[JS] alert, prompt, confirm  (0) 2022.06.22
[JS]자료형  (0) 2022.06.20
JavaScript 기초  (0) 2022.06.20