NOW OR NEVER

드림엘리 : Javascript 기초 - 1. 변수(Primitive vs Object) 본문

Front-End/Javascript

드림엘리 : Javascript 기초 - 1. 변수(Primitive vs Object)

LAURA 2021. 12. 24. 22:09
반응형

변수

  • 프로그래밍 언어에서 처리해야하는 data를 담을 수 있도록 도와주는 것, 즉 data를 담고있는 것이다.
  • 변수를 통해서 data에 접근하고 data를 업데이트 할 수 있다.
  • let 키워드를 활용해 변수를 만듦, 변수이름은 원하는대로 지정이 가능하다.
    • let의 경우 변수를 선언하고 나서 값을 또 바꿀 수 있다.
  • const 상수 변수
    • 한번 선언하고 나면 값을 변경할 수 없다.
    • 상수 변수가 담겨있는 메모리 공간 변경 불가
  • 변수 이름 설정시 프로그래밍을 할 때 로직과 연관된 조금 더 의미있는 이름을 지정해서 만드는 것이 좋다
  • 변수 선언시 무조건 그 변수를 위한 공간이 생긴다.(메모리에 어느정도 byte size의 공간이 확보된다)
  • 변수1에 변수2 할당시 무조건 그 변수2에 들어있는 값이 복사되어서 들어가진다.

primitive 타입과 object의 차이점

  • primitive data type : 담을 수 있는 가장 작은 단위의 data들
    • ex) number, string, boolean, null, undefined, symbol
    • 변수를 선언함과 동시에 메모리에 정의한 변수를 위한 공간이 생긴다. primitive type의 data를 거기에 할당한다는 것은 그 공간의 해당 data가 적재되어진다는 것이다.
    • primitive type data의 경우 변수 할당시 그값이 변수 자체에 담겨 있어서 변수1에 변수2(primitive data 들어있다고 가정) 할당시 data 자체가 복사되어서 변수 1에 들어온다.
  • object : primitive type을 제외한 모든 data들
    • ex) array, list, function 등
    • 최소한 한 두 가지 이상의 다양한 data들을 한 군데다가 모아놓은 것
    • 적어도 한 두 가지 이상의 큰 data가 들어있기 때문에 너무 뚱뚱해서 단순히 변수를 선언하는 곳에 다 담아놓을 수 없다.
    • object는 그들만의 공간에 있다.
    • 결국 object에 있는 key도 각각 key마다 메모리가 할당된다고 생각하면 된다.
    • 변수에 object 할당시 object를 가리키는 주소 즉 reference가 들어간다.
    • object의 경우 변수 할당시 object를 가리키고 있는 주소(reference)가 들어있기 때문에 변수1에 변수2(object가 들어있다고 가정) 그 주소만 복사되어서 변수 1에 들어온다.
  • 변수를 선언하면 data를 담을 수 있는 공간이 할당이 되고 해당 변수이름이 할당된 공간으 가리키게 된다. primitive type의 경우 data가 작은 단위이기 때문에 메모리에 고대로 들어오지만 object처럼 뚱뚱한 아이는 메모리에 들어올 수 없기 때문에 object의 경우 따로 어딘가 그들만의 공간에 들어있고 이 object를 가리키는 주소같은 것인 reference가 변수에 할당된다.
  • 변수를 다른 변수에 할당하거나 전달할 때 변수 안에 들어있는 값이 복사되어서 가는데 primitive type의 경우 값 자체가 들어있으니까 값 자체가 복사되어서 전달이 되지만, object의 경우 reference가 복사되어서 전달된다. 그래서 object를 통해서 무언가 data를 변경하면 object가 가리키는 data가 업데이트 되는 것이다.
  • primitive type data의 경우 값 자체가 변수에 담겨져 있어서 값이 변경이 불가능
  • const로 선언한 변수에 할당된 object 내 값을 변경할 수 있는 이유
    • object를 const로 선언된 변수에 할당하면 object가 담겨있는 reference가 들어있게 된다.
    • 그 변수에는 다른 object이 할당되지 못한다.(즉 reference를 다른 reference로 변경 불가)
    • 해당 reference의 object가 가리키고 있는 key나 value를 변경하는 것은 가능하다.
    • const로 선언해 그 메모리 공간은 잠겨서 더이상 변경이 불가능하지만 reference가 가리키고 있는 것의 값들은 변경이 가능하기 때문이다.
    • object는 object 자체가 변수에 담겨 있는 것이 아니라 object는 어딘가에 따로 저장되어져 있고 object를 가리키고 있는 reference가 메모리에 들어있기 때문에 이 reference는 다른 object로는 변경이 불가능하지만 이 reference가 가리키고 있는 object의 안의 내용은 변경이 가능하다.
Comments