딥다이브 4장, 5장

leewol·2023년 1월 26일
0
post-thumbnail

[4장] 변수

변수(variable)

  1. 하나의 값을 저장하기 위해 확보한 메모리 공간 자체

  2. 그 메모리 공간을 식별하기 위해 붙인 이름
    (값의 위치를 가리키는 상징적인 이름)

할당(assignment)

변수에 값을 저장하는 것

  • 할당 연산자 = 사용
  • 우변 값을 좌변 변수에 할당
  • 값의 할당은 런타임에 실행
    • 변수 선언과 값 할당의 실행 시점은 다르다
console.log(score); // undefined
var score = 80; // 변수 선언 및 값 할당
console.log(score); //80

재할당

이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것

  • 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 상수(constant)

  • [참고] 가비지 콜렉터(garbage collector)
    애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리(즉, 어떤 식별자도 참조하지 않는 메모리 공간)를 해제하는 기능

    • 메모리 누수 방지
    • 언제 메모리에서 해제될지는 예측할 수 없음
    • WeakRef()

참조(reference)

변수에 저장된 값을 읽어 들이는 것

변수 선언(variable declaration)

변수를 생성하는 것

즉, 값을 저장하기 위한 메모리 공간을 확보(allocate)하고 변수 이름과 확보된 메모리 공간의 주소를 연결(name binding)해서 값을 저장할 수 있게 준비하는 것

  • 해제(release) 전까지는 누구도 이미 확보된 메모리 공간을 사용할 수 없도록 보호됨
  • 변수를 사용하려면 반드시 선언이 필요
  • var let const 키워드 이용

초기화(initialization)

변수가 선언된 이후 최초로 값을 할당하는 것

  • var 키워드로 선언한 변수는 undefined로 암묵적인 초기화 자동 수행

식별자(identifier)

어떤 값을 구별해서 식별할 수 있는 고유한 이름
변수 이름을 식별자라고도 함

  • 식별자는 값이 아니라 메모리 주소를 기억
  • 모든 식별자는 실행 컨텍스트(execution context)에 등록
    • 실행 컨텍스트는 JS 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고, 코드 실행 결과를 실제로 관리하는 영역
    • JS 엔진은 이를 통해 식별자, 스코프 관리
  • 선언하지 않은 식별자에 접근하면 ReferenceError (참조 에러) 발생

네이밍 규칙

  1. 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($) 포함 가능
  2. 단, 숫자로 시작하는 것은 비허용
  3. 예약어는 식별자로 사용 불가능 (strict mode)
  • 자바스크립트는 대소문자 구별
  • 의미를 명확히 표현해야 함

네이밍 컨벤션(naming convention)

하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 한눈에 구분하기 위해 규정한 명명 규칙

  1. camelCase
  2. snake_case
  3. PascalCase
  4. 헝가리언 케이스(typeHungarianCase)

변수 호이스팅(variable hoisting)

// 참조 에러가 발생하지 않고, undefined가 출력

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

변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징

  • 변수 선언이 런타임(소스코드가 한 줄씩 순차적으로 실행되는 시점) 이전 단계에서 먼저 실행되기 때문에 발생
  • 변수 선언뿐 아니라, var let const function function* class 키워드를 사용해서 선언하는 모든 식별자(변수, 함수, 클래스 등)는 호이스팅이 발생
    • 모든 선언문은 런타임 이전 단계에서 먼저 실행되기 때문

[5장] 표현식과 문

값(value)

표현식이 평가(evaluate)되어 생성된 결과

리터럴(literal)

사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)

표현식(expression)

으로 평가될 수 있는
즉, 표현식이 평가되면 새로운 값을 생성하거나 참조

  • 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이루어질 수 있음
  • 표현식과 표현식이 평가된 값은 동치(equivalent)
  • 표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있음
  • 표현식이 아닌 문은 값으로 평가할 수 없어 변수에 할당되지 못한다

문(statement)

프로그램을 구성하는 기본 단위이자 최소 실행 단위
컴퓨터에 내리는 명령

  • 문의 집합으로 이루어진 것은 프로그램, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍
  • 여러 토큰으로 구성
  • 선언문, 할당문, 조건문, 반복문 등으로 구분
    • 함수 선언문은 그 자체가 하나의 값이 될 수 있으므로 함수 표현식이 등장

토큰(token)

문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소

ex) 키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등

세미콜론(;)

문의 종료를 나타냄

  • 0개 이상의 문을 중괄호로 묶은 코드블록은 자체 종결성(self closing)을 가지므로 이 뒤에는 붙이지 않음
    ex) if문, for문, 함수 등
  • JS 엔진은 소스 코드를 해석할 때 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여 주는 세미콜론 자동 삽입 기능(ASI, automatic semicolon insertion)이 암묵적으로 수행됨
profile
간살간죽 개살개죽

0개의 댓글