[JS] Variable

돗개·2022년 4월 19일
0

crack JavaScript

목록 보기
2/18
post-thumbnail

변수란?

Variable

  • 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
  • 그 메모리 공간을 식별하기 위해 붙인 이름

변수가 필요한 이유

  • 컴퓨터는 메모리를 사용해 데이터를 기억
  • 각 메모리 셀은 고유의 메모리 주소(=메모리 공간의 위치)를 가짐
  • 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 재사용하기 위해 사용
    • 변수명을 통해 변수에 저장된 값의 의미를 명확히 할 필요가 있음 (변수명을 잘 짓자!)
  • 개발자가 직접 메모리 주소를 접근/제어하지 않고, 변수를 통해 안전하게 값에 접근

Terms

const result = 10 + 20

  • 변수명 - 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름 (result)
    • =식별자 - 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름
      (ex. 변수, 함수, 클래스 등의 이름)
    • 선언(declaration)에 의해 자바스크립트 엔진에 식별자의 존재를 알림
    • 실행 컨텍스트 - 변수명과 모든 식별자는 실행 컨텍스트에 등록되어, 자바스크립트 엔진이 코드를 평가할 수 있도록 관리
  • 변수 값 - 변수에 저장된 값 (30)
  • 할당(assignment) - 변수에 값을 저장하는 것
    • 재할당 - 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것
      • 저장된 메모리 공간을 지우는 것이 아니라, 새로운 메모리 공간을 확보 후 새로운 값을 저장
      • 사용하지 않는 불필요한 값들은 가비지 컬렉터에 의해 메모리에서 자동 해제됨
  • 초기화(initialization) - 변수가 선언된 이후 최초로 값을 할당하는 것
    • 초기화 단계를 거치지 않으면, garbage value가 나올 수 있음
  • 참조(reference) - 변수에 저장된 값을 읽어 들이는 것

변수 선언

변수를 생성하는 것

  • 값을 저장하기 위한 메모리 공간을 확보
  • 변수명과 메모리 공간의 주소를 연결해 값을 저장할 수 있게 준비
  • var, let, const 키워드를 사용해 변수를 선언
  • 변수 선언(및 모든 선언문)은 런타임이 아니라 그 이전 단계에서 실행됨 (=변수 호이스팅)

var

  • 블록 레벨 스코프를 지원하지 않고, 함수 레벨 스코프를 지원
  • 선언&초기화 단계가 동시에 진행됨
    • 선언 단계: var score; var name, score;
    • 초기화 단계: 메모리 공간에 undefined가 암묵적으로 할당되어 초기화
  • 이미 값이 할당된 변수에 새로운 값을 재할당 할 수 있음

const

  • 한번만 할당할 수 있는 변수를 선언
  • 상수를 표현할 수 있다

네이밍 규칙

  • 변수명은 대소문자를 구별
  • 문자, 숫자, 언더스코어, 달러기호 포함 가능
  • 예약어(function, class 등) 금지
  • 의미를 명확히 표현하여 가독성 높이기
  • Naming convention
    • camelCase - 변수나 함수 이름에 자주 사용
    • snake_case
    • PascalCase - 생성자 함수, 클래스 이름에 자주 사용

값 할당

변수에 값을 대입/저장

  • 할당 연산자 =을 사용
  • 우변의 값을 좌변의 변수에 할당
  • 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행됨

변수 선언 & 할당

: 단축표현일 뿐이지, 자바스크립트는 선언과 할당을 2개의 문으로 나누어 각각 실행

const userId = 1;
const userName = 'suuhyeony';
const user = { id: 1, name: 'suuhyeony' };
const users = [
  { id: 1, name: 'suuhyeony' },
  { id: 2, name: 'dotgae' }
]

참고 - 모던 자바스크립트 Deep dive

profile
울보 개발자(멍.. 하고 울어요)

0개의 댓글