JS 변수

하나의 값을 저장할 수 있는 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.

식별자

변수 이름을 식별자라고도 부른다. 어떤 값이 저장되어 있는 메모리 주소를 기억해야 한다.

변수선언

변수: 바뀔 수 있는 값. 값을 선언 후에 바꿀 수 있다. (var, let)
상수: 한번 선언하고 값이 바뀌지 않는 고정적인 값. (const)
let / const: 재선언 불가

변수 호이스팅

1
2
console.log(score); // undefined
var score; // 변수 선언(변수 선언문)

변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작한다.

값의 할당

1
2
3
console.log(score); // undefined
var score = 80; // 변수 선언과 값의 할당
console.log(score); // 80

변수에 값을 할당(assignment 대입, 저장)할 때는 할당 연산자(=)를 사용한다. 할당 연산자는 우변의 값을 좌변의 변수에 할당한다. 변수 선언과 값의 할당을 아래와 같이 하나의 문(Statement)으로 단축 표현할 수도 있다. 변수 선언은 소스 코드가 순차적으로 실행되기 이전, 즉 런타임 이전에 먼저 실행되지만 값의 할당은 소스 코드가 순차적으로 실행되는 시점인 런타임에 실행된다.

값의 재할당

1
2
var score = 80; // 변수 선언과 값의 할당
score = 90; // 값의 재할당

var 키워드로 선언한 변수는 값을 재할당할 수 있다. 재할당은 현재 변수가 저장하고 있는 값을 버리고 새로운 값을 저장하는 것이다. 재할당을 할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수(Constant)라 부른다.

가비지 컬렉터(Garbage Collector)
애플리케이션이 할당(allocate)한 메모리 공간을 주기적으로 검사하여 더 이상 사용되고 있지 않는 메모리를 해제(release)하는 기능

언매니지드 언어
개발자가 명시적으로 메모리를 할당하고 해제하기 위해 malloc()과 free()와 같은 저수준(low-level) 메모리 관리 기능을 제공한다.
장점: 메모리 관리를 개발자가 주도하므로 개발자의 역량에 의해 최적의 퍼포먼스를 확보
단점: 치명적 오류를 생산할 가능성도 동시에 존재

매니지드 언어
메모리의 할당 및 해제를 위한 메모리 관리 기능을 언어 차원에서 담당하고 개발자의 직접적인 메모리 제어를 허용하지 않는다.
장점: 개발자의 역량에 의존하는 부분이 상대적으로 작아져 어느 정도 일정한 생산성을 확보
단점: 퍼포먼스 면에서의 손실은 감수할 수 밖에 없음

값의 교환

1
2
3
4
5
6
7
8
var x = 1;
var y = 2;

var temp = x;
x = y;
y = temp;

console.log(x, y); // 2 1

식별자 네이밍 규칙

  • 특수문자를 제외한 문자, 숫자, underscore(_), 달러기호($)를 포함할 수 있다.
  • 식별자는 숫자로 시작할 수 없다.
  • 예약어는 식별자로 사용할 수 없다.

예약어
await / break / case / catch / class / const / continue / debugger / default / delete / do / else / enum / export / extends / false / finally / for / function / if / implements * / import / in / Instanceof / interface / let * / new / null / package * / private * / protected * / public * / return / super / static * / Switch / this / throw / true / try / typeof / var / void / while / with / yield *

: 식별자로 사용 가능하나 Strict Mode에서는 사용 불가

표기법

  1. 캐멀 표기법 (ex. newName)
  2. 파스칼 표기법 (ex. NewName)
  3. 스네이크 표기법 (ex. new_name)
  4. 헝가리언 표기법 (ex. strNewName // type + identifier)
  • 캐멀 표기법을 사용하여 변수의 의미를 파악할 수 있도록 한다.
  • 영어 단어를 기본적으로 사용한다.
  • 루프 카운터 변수로는 i, j, k 등을 사용한다.
  • 상수는 대문자로 표현한다. (ex. MAX_SIZE)
  • 논리값을 표현하는 변수에는 앞에 is을 붙인다. (ex. isMouseDown)
  • 생성자 이름은 파스칼 표기법을 사용한다.

데이터 타입

  1. 원시 타입
  • 숫자 (Number): 정수, 실수
  • 문자열 (String): 문자열
  • 불리언 (Boolean): 논치적 참, 거짓 (true, false)
  • null: 값이 없다는 것을 의도적으로 명시
  • undefined: 선언은 되었지만 값이 할당되지 않았을 때 암묵적으로 할당되는 값
  • Symbol: Es6에서 새롭게 추가된 7번째 타입
  1. 객체 타입
  • 객체
  • 함수
  • 배열

데이터 타입이 필요한 이유

  1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  2. 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지를 결정하기 위해

더 이상 평가할 수 없는 하나의 표현식이다.

1
2
// 변수에는 표현식 1 + 2의 평가되어 생성한 값 3이 할당된다.
var sum = 1 + 2;

리터럴

리터럴은 소스 코드 안에서 직접 만들어 낸 고정된 값 자체이다. 리터럴 표기법은 사람이 이해할 수 있는 표기법으로 값의 생성을 자바스크립트 엔진에게 명령하는 것이다.

1
2
3
4
5
// 표기법만 다를 뿐 같은 값이다.
65 // 정수 리터럴
0b01000001 // 2진수 리터럴
0o101 // 8진수 리터럴
0x41 // 16진수 리터럴

표현식

표현식은 하나의 값으로 평가될 수 있는 문(statement)이다.

숫자 타입

  • 배정밀도 64비트 부동소수점 형식(double-precision 64-bit floating-point format)을 따른다.
  • 모든 수를 실수로 처리한다.
  • 특별한 값 표현 가능하다.
    • Infinity: 양의 무한대
    • Infinity: 음의 무한대
    • NaN: 산술 연산 불가(not-a-number)

문자열 타입

  • 0개 이상의 16bit 유니코드 문자(UTF-16) 들의 집합으로 전세계 대부분의 문자를 표현할 수 있다.
  • 작은 따옴표(‘’), 큰 따옴표(“”) 또는 백틱(``) 안에 텍스트를 넣어 생성한다.
  • 따옴표로 문자열을 감싸지 않는다면 스페이스와 같은 공백 문자도 포함시킬 수 없다.
  • 문자열은 원시 타입이며 변경 불가능한 값 (immutable value)

이스케이프 시퀀스(Escape Sequence)

이스케이프 시퀀스 의미
\0 Null
\b 백스페이스
\f 새로운 페이지
\n 개행(LF, Line Feed)
\r 캐리지 리턴(CR, Carriage Return)
\t 탭(수평)
\v 탭(수직)
\’ 작은 따옴표
\” 큰 따옴표
\\ 백슬래시

템플릿 리터럴

  • 여러 줄에 걸쳐 문자열을 작성 가능하다.
  • 모든 공백은 있는 그대로 적용된다.
  • 백틱(``)을 사용한다.

문자열 인터폴레이션

${ }으로 표현식을 감싼다. 이때 표현식의 평가 결과는 문자열로 강제 타입 변환된다.

1
2
3
4
5
6
var first = 'Minjee';
var last = 'Kim';

// ES6: String Interpolation
console.log(`My name is ${first} ${last}.`);
// My name is Minjee Kim.
1
console.log(`1 + 1 = ${1 + 1}`); // 1 + 1 = 2

불리언 타입

true, false 값만 가지고 있다. 참과 거짓으로 구분되는 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 주로 사용한다.

undefined 타입

값은 undefined가 유일하다. 선언 이후 명시적으로 값을 할당하지 않은 변수는 자바스크립트 엔진의 암묵적 초기화에 의해 undefined 값을 가진다. 변수에 값이 없다는 것을 명시하고 싶은 경우 null을 할당한다.

null 타입

값은 null이 유일하다. 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재 Intentional absence)할 때 사용한다. 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미이다.

symbol 타입

ES6에서 새롭게 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다. 심볼은 주로 이름의 충돌 위험이 없는 객체의 유일한 프로퍼티 키(property key)를 만들기 위해 사용한다. Symbol 함수를 호출해 생성한다. 다른 값과 절대 중복되지 않는 유일무이한 값이다.

객체 타입

자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 “모든 것”이 객체다.

동적 타이핑

정적 타입(Static/Strong type) 언어
변수의 타입을 변경할 수 없으며 변수에 선언한 타입에 맞는 값만을 할당할 수 있다.

동적 타입(Dynamic/Weak type) 언어
변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

변수를 사용할 때 주의사항

  • 변수의 사용을 적극적으로 줄인다.
  • 전역 변수는 사용하지 않는다.
  • 변수의 스코프를 최대한 짧게 만든다.
  • 변수보다는 상수를 사용해 값의 변경을 최소한으로 한다.
  • 변수 이름은 변수의 사용 이유를 파악할 수 있도록 짓는다.

REFERENCE
https://poiemaweb.com

  • © 2020-2025 404 Not Found
  • Powered by Hexo Theme Ayer