반응형

 

 

 

job 이란 객체가 어떤 식으로 할당되고 저장되는지 생각해 보자. 

const job = {
  job: "senior developer",
  career: "10",
  ageGroup: {
    group: 30,
    person: {
      name: "ingoo",
      id: "web7722",
    },
  },
};

위와 같이

1. job 객체 내부에는 job, career, agerGroup의 키값으로 프로퍼티들이 저장돼있다. 

2. ageGroup 안에는 키 값으로 group 과 person으로 프로퍼티들이 저장돼있다.

3. person 안에는 키 값으로 name과 id 가 프로퍼티로 저장돼있다. 

이때 어떠한 방식으로 데이터가 저장되는지 확인해 보자. 

 

 

첫 번째로 job 객체가 생성되면 job 객체는 영역을 할당하고 영역은 키값으로 job, career, ageGroup 으로 나뉜다. 각각의 키값들은 각각의 키에 대한 value 값을 저장하기 위해 값을 저장한 주소를 가리키는데 원시타입 job의 데이터는 senior developer로 원시타입 String, career는 10으로 원시타입 Number 데이터를 가지고 있기 때문에 할당된 주소에 값들을 저장한다. 

 

 둘째로 ageGroup의 경우 데이터를 할당하기 위해 0x4번지에 객체를 할당하고 그 객체의 내부는 또 키값인 group과 person으로 나뉘고, group의 경우 원시타입 Number로 30을 저장하기 때문에 0x5번지에 30을 저장하고, person의 경우 또 객체를 저장하고 있기 때문에 0x6번지에 객체를 저장하게 된다. 객체의 내부에는 name, id 의 키값을 가지고 있고, 최종적으로 ingoo와 web7722 의 String 원시데이터 타입을 가지고 있기때문에 더 이상 주소할당을 하지 않게 된다. 이 처럼 자바 스크립트는 객체가 생성될 때 프로퍼티의 타입에 따라 할당되는 값과 번지수 들이 다르고 원시타입의 데이터 이외의 타입들은 참조 타입이라 불리고 위와 같이 객체와 같은 참조 타입들은 어떠한 데이터를 넣느냐에 따라 동적으로 데이터의 크기가 변할 수 있다. 

 

이로써 알 수 있는 것은 원시타입 데이터를 저장하는 것은 데이터의 크기가 변하지 않고, 이와 반대로 참조타입의 데이터들은 동적으로 크기가 변할 수 있다는 것이다. 또한 참조타입의 데이터의 경우 참조될 주소값으로 저장되기 때문에 주소값을 참조하여 타고 들어가 데이터 값들을 가져올 수 있다. 

 

위와 같이 변수 안에 직접값을 넣지 않고, 데이터값을 참조하는 참조주소값을 넣는 이유는 메모리를 효율적으로 사용하기 위해서 이다. 만일 0x3번지의  데이터값이  10이라는 숫자에서 객체로 바뀐다면 할당되는 공간의 크기가 바뀌기 때문에 이를 찾아서 재할당하기 위해 크기를 늘리는 작업을 해야하지만, 0x3번의 참조 주소값을 지우고, 0x9번지에 객체데이터를 넣게 되면 참조되는 주소값을 바꿈으로써 쉽게 할당할 수 있다.  이때 0x3 번지의 주소가 끊기고 이는 자바스크립트의 가비지 컬렉터가 자동적으로 메모리 할당을 해제 시킨다. 이처럼 변하는 데이터타입에 따라 할당 공간과 크기가 달라지기 때문에 자바스크립트는 직접적으로 값을 저장하지 않고 참조값형태로 데이터를 저장한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts