[JavaScript] 리터럴과 변수, 상수, 데어터 타입

빵호·2022년 2월 21일
0

JavaScript

목록 보기
26/28
post-thumbnail

리터럴과 변수, 상수, 데어터 타입

리터럴(literal)과 변수(variable), 상수(const), 데어터 타입에 대해 알아 보자.

변수

변수란 간단히 말해 이름이 붙은 값으로, 언제든 바뀔 수 있다.

let currentTempC = 22; // 섭씨온도

변수 currentTempC를 선언(할당) 하고 초기값을 할당한다.
currentTempC의 값은 언제든 바꿀 수 있다.

currentTempC = 22.5;

let은 변수 선언에만 쓰이고 각 변수는 한 번만 선언할 수 있다.

let targetTempC;
console.log(targetTempC); // undefined

변수를 선언할 때 초기값을 할당하지 않으면 undefined가 할당된다.

상수

const currentTempC = 22; 
currentTempC = 22.5 // error

상수도 변수와 마찬가지로 값을 할당받을 수 있지만, 한 번 할당한 값을 바꿀 수는 없다.

식별자 이름

변수와 상수, 함수 이름을 식별자(identifier)라 부르고 식별자에는 규칙이 있다.

  • 식별자는 반드시 글자나 달러 기호($), 밑줄(_)로 시작해야 한다.
  • 식별자에는 글자와 숫자, 달러 기호, 밑줄만 쓸 수 있다.
  • 유니코드 문자도 쓸 수 있다.
  • 예약어는 실별자로 쓸 수 없다.

자바스크립트 식별자 표기법 중 가장 널리 쓰이는 방법은 다음과 같다.

  • 카멜 케이스(camel case)
    이름 중간중간의 대문자가 낙타의 혹처럼 생겼다고 하여 카멜 케이스로 불린다.
    ex) currentTempC, anIdentifierName
  • 스네이크 케이스(snake case)
    언더바가 뱀처럼 생겼다고 하여 스네이크 케이스로 불린다.
    ex) current_temp_c, an_identifier_name

표기법은 무엇을 써도 상관없지만 일관성을 지켜야 한다.

리터럴

리터럴은 값을 프로그램 안에서 직접 지정한다는 의미이고 값을 만드는 방법이다. 자바스크립트는 개발자가 제공한 리터럴 값을 받아 데이터를 만든다.

let room1 = "conference_room_a"; // "conference_room_a" (따옴표 안)은 리터럴

위의 코드의 경우 room1이 변수를 가리키는 식별자이고 "conference_room_a"은 문자열 리터럴인 동시에 room1의 값이다.

원시 타입과 객체

자바스크립트의 값은 원시 값(primitive) 또는 객체(object)이다.

원시 타입은 불변(immutable)이고 원시 타입에는 여섯 가지가 있다.

  • 숫자
  • 문자열
  • 불리언
  • null
  • undefined
  • 심볼(Symbol)

원시 타입 외에 객체가 있고 원시 값과 달리 객체는 여러 가지 형태와 값을 가질 수 있다.

  • Array
  • Date
  • RegExp
  • Map, WeakMap
  • Set, WeakSet

숫자

자바스크립트는 실제 숫자의 근사치를 저장할 떄 IEEE-764 배정도(double-precision) 부동소수점 숫자 형식을 사용한다.

자바스크립트는 다른 언어와 다르게 숫자형 데이터 타입이 하나밖에 없다.

자바스크립트는 10진수, 2진수, 8진수, 16진수의 네 가지 숫자형 리터럴을 인식한다.

문자열

자바스크립트 문자열은 유니코드(Unicode) 텍스트이다.

유니코드는 텍스트 데이터에 관한 표준이며 모든 언어의 텍스트를 나타낼 수 있다.

자바스크립트의 문자열 리터럴에는 작은따옴표, 큰따옴표, 백틱(backtick)을 사용한다.

불리언

불리언은 true와 false 두 가지 값밖에 없는 데이터 타입이다.

모든 값을 참 같은 값(truthy), 거짓 같은 값(falsey)으로 나눌 수 있다.

불리언을 쓸 경우 따옴표 안에 넣지 않도록 조심해야 하고 문자열 "false"는 참 값은 값이다.

심볼

심볼(Symbol)은 유일한 토큰을 나타내기 위해 ES6에 추가된 데이터 타입이다. 심볼은 항상 유일하고 그렇기 때문에 어떤 심볼과도 일치하지 않는다.

const RED = Symbol("The color of a sunset!");
const ORANGE = Symbol("The color of a sunset!");
RED === ORANGE // false

다른 식별자와 혼동해서는 안 되는 고유한 식별자가 필요할 경우 심볼을 사용하면 된다.

null과 undefined

null과 undefined는 자바스크립트의 특별한 타입이고 둘 다 존재하지 않는 것을 나태낸다.

일반적인 규칙은 null은 프로그래머에게 허용된 데이터 타입이고 undefined는 자바스크립트 자체에서 사용한다.

객체

객체는 여러 가지 값이나 복잡한 값을 나타낼 수 있으며, 변할 수도 있다.

객체의 본질은 컨테이너이다. 컨테이너의 내용물은 바뀔 수 있지만, 내용물이 바뀐다고 컨테이너가 바뀌는 건 아니다. 즉, 여전히 같은 객체이다.

객체의 콘텐츠는 프로퍼티(property) 라고 부르고 프로퍼티는 이름(키)과 값으로 구성된다. 이름은 반드시 문자열이나 심볼이어야 하며, 값은 어떤 타입이든 상관없다.

프로퍼티 이름이 유효한 식별자일 경우 점 연산자(.)를 사용할 수 있고 이름이 유효한 식별자가 아닐 경우에는 꼭 대괄호([])를 써야 한다.

const sam1 = { name : 'Sam', age : 4 };
const sam2 = { name : 'Sam', age : 4 };
console.log(sam1.name === sam2.name) // true 같은 원시 값을 가리킴
console.log(sam1 === sam2) // false

sam1과 sam2의 프로퍼티는 똑같지만, 둘은 서로 다른 객체이다.

Number, String, Boolean 객체

숫자와 문자열, 불리언에는 각각 대응하는 객체 타입 Number, String, Boolean이 있다. 이 객체들은 특별한 값을 저장할수 있고 함수 형태로 기능을 제공한다.

const s = "hello";
s.toUpperCase(); // "HELLO"

s가 객체처럼 함수 프로퍼티를 가진 것처럼 보인다. s는 문자열 타입인데 이게 가능한 이유는 자바스크립트가 일시적인 String 객체를 만들고 이 임시 객체에
toUpperCase 함수가 들어있기 때문이다.

임시 객체는 함수를 호출하는 즉시 파괴된다.

배열

배열은 특수한 객체이고 일반적인 객체와 달리 배열 콘텐츠에는 항상 순서가 있다.

자바스크립트의 키는 순차적인 숫자이고 다음과 같은 특징이 있다.

  • 배열 크기는 고정되지 않는다. 언제는 요소를 추가하고 제거할 수 있다.
  • 요소의 데이터 타입을 가리지 않는다.
  • 배열의 요소는 0으로 시작한다.
profile
늘 한결같이 꾸준히

0개의 댓글