[js 딥다이브] 4.변수 정리

미아·2022년 10월 20일
1

js 딥다이브

목록 보기
1/10

4. 변수

4.1 변수란 무엇인가? 왜 필요한가?

  • 컴퓨터는 메모리를 사용해서 데이터를 기억
    메모리: 데이터 저장할 수 있는 메모리 셀의 집합체
    셀 -> 고유의 메모리 주소를 갖는다

    10+20

  • 10, 20인 숫자값도 메모리에 저장되고 (+ 연산을 수행 한뒤 ) 30도 메모리에 저장

🔨치명적인 문제: 직접 메모리에 접근하는건 치명적 오류 발생시킬 가능성이 높음
(컴퓨터는 계산하는 공간(cpu)과 저장하는 공간(memory)이 다르다)

=> 해결방안 : 저장하려는 공간을 만들자!

  • 변수(variable): 하나의 값을 저장하기 위해 확보한 메모리 공간. 그 메모리 공간을 식별하기 위해 붙인 이름
    * 변수는 하나의 값을 저장하기 위한 공간(여러개 값 저장하려면 원래는 여러개 변수 사용해야) -> 배열, 객체 이용하면 한 공간에 여러 값 저장 가능

let userName = 'gyeongmi';

  • userName : 변수이름(변수명)
  • 'gyeongmi' : (문자열 형태로 저장된) 변수 값

🔨 헷갈리는 개념

  • 할당(assignment) : 변수에 값 저장
  • 참조(reference) : 변수에 저장된 값 읽어들이기

4.2 식별자

  • 식별자 : 어떤 값 구별할수 있는 고유한 '이름' (like gyeongmi)
    ex. 위 예제 let userName(식별자)에는 값 'gyeongmi' 저장되어있다.
  • 식별자는 값이 아니라 메모리 주소를 기억!
    (즉 식별자는 메모리 주소에 붙인 이름~)

4.3 변수 선언

  • 변수 선언(declaration) : 변수를 만드는것

💥 변수를 사용하려면 반드시 선언 필요

  • 변수의 키워드 : var(전역변수처럼 사용) , let , const

var score; //변수 선언

변수 선언 2단계

1) 선언 단계: 변수 이름 등록해서 자바스크립트 엔진에 변수 존재 알림 (🙋‍♀️(변수) : 나 만들어질게!)
2) 초기화 단계: 값을 저장하기 위한 메모리 공간 확보, 임시적으로 undefined 값 할당해(넣어서) 초기화한다.
(🙋‍ : 공간 만들고 undefined 일단 넣어둘게~) -> only var
* 초기화: 변수 선언 이후 최초로 값 할당(보통 0, 1, true, false 넣어둔다) =>근데 var 키워드 할당한 경우만 undefined 값 일단 가짐(값 할당 안해도!)

4.4 변수 선언의 실행 시점, 변수 호이스팅


(참고 : 자바스크립트는 인터프리터에 의해 한줄씩 순차적으로 수행)

  • score 변수 선언문이 나중에 나오는데 오류 안나는 이유 : 변수 선언이 런타임(소스코드 한줄씩 읽는 시점)이 아니라 그 전단계에서 실행하기 때문!

  • 변수 호이스팅: 변수 선언문이 코드의 선두로 올라간것처럼(like defer) 동작하는 자바스크립트 고유의 특징(변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는것)

🔨주 의

  • let : let 변수는 초기화 하기 전에는 읽거나 쓸수 x(단 선언 구문에 초기값 지정안하면 undefined로 초기화) => 앞선 var 예시처럼 초기화 전에 접근 시도? ReferenceError // const 마찬가지

  • let const로 선언한 변수도 호이스팅 대상이긴하지만, var 와 달리 호이스팅시 undefined로 변수 초기화하지 않는다는거!

  • undefined / null 차이
    undefined 는 변수를 선언했지만 값이 할당 x
    null은 명시적으로 할당한것(값을 나타내진 않지만 명시적으로 할당했다는 점에서 undefined와는 다름)

4.5 값의 할당

  • 할당 연산자 =
    = : 우변의 값을 좌변의 변수에 할당해라!

let score = 80; //변수의 선언과 값의 할당 동시에 가능

4.6 값의 재할당

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

  • const(상수)는 값을 재할당 할수 없다!

값의 저장 방식


1. 처음 선언시 score 변수 undefined로 초기화(값 할당)
2. score = 80;이라고 값 할당
3. 80 저장되었던 메모리 공간 말고, 다른 메모리 공간 확보한 후 90 저장
-> 필요없어진 undefined , 80 공간 => 가비지 콜렉터에 의해 메모리가 자동 해제됨(근데 언제일진 모름~)

4.7 식별자 네이밍 규칙

  • 특수문자 제외한 문자, 숫자, _(underscore), $ 포함 가능
  • 단, 특수문제 제외한 문자, _(underscore), $로 시작해야(숫자로 시작하는거 안됨)
  • 예약어는 식별자로 사용 안된다!

    (class 대신 clazz라고 많이 쓴다함)

✅ 추가 사항

  • 자바스크립트는 대소문자 구별함
  • 공백 불가
  • 변수 이름은 의미 명확히 표현할 수 있어야함
  • 변수, 함수에는 카멜케이스 주로 사용
  • 생성자 함수, 클래스 이름엔 파스칼 케이스 주로 사용

    let firstName; //camel case
    let first_name; //snake case
    let FirstName; //pascal case

profile
새로운 것은 언제나 재밌어 🎶

0개의 댓글