코어자바스크립트 강의정리 - 1. 데이터 타입

1. 데이터 타입 

자바스크립트 데이터 종류 (기본형, 참조형)

기본형 데이터 : 정적할당

참조형 데이터 : 동적할당

Why?

기본형 데이터의 할당 방식

var a = 1 이라고 하였을때

자바스크립트 내부적으로는 var a; a = 1; 로 처리

따라서 임의의 메모리 주소(1004) 에 (이름 : a, 값 : 없음) 저장 후 다른 임의의 메모리 주소(5000)에 데이터 1 을 저장.

그리고 메모리 주소 1004 의 값에 메모리 주소 5000을 저장하여  (이름 : a, 값 : @5000) 으로 만든다.

 

참조형 데이터의 할당방식

var obj= { a : 11,  b : 11} 이라고 하였을때 메모리주소 1004에 (이름 : obj, 값 : 없음) 저장, 임의의 메모리 주소 5000에  @7000~@70?? 까지의 메모리 주소 데이터 저장(배열이나 객체는 값이 여러가 들어가기 때문에 미리 공간을 확보해 둠)

@7000 에 정적 할당 방식과 같이 (이름 : a , 값 : 없음) 저장, 임의의 메모리 주소 @5001에 데이터 11 저장.

@7000 의 값을 @5001 로 저장. @7001 에 (이름 : b, 값 : @5001) 저장. @1004의 값에 @5000 저장.

 

결국 어떤 데이터를 저장할때 기본형이나 참조형이나 가장 작은 데이터의 단위(위의 예시에서 1, 11 과 같은 값)를 중복하지 않고 공유해서 가지고 있고, 그 주소를 참조한다. 그렇기 때문에 const obj 를 사용하여도 obj 내부의 값을 바꿀수 있는 것.

같은 원리로 var obj2 = obj ; obj2.a=99; 를 하고 나면 obj나 obj2나 @5000이 가리키고 있는 @7000~@70?? 의 값을 받아오기 때문에 obj.a 도 99의 값을 갖는다.

 

번외 : 그럼 왜 자바스크립트는 가장작은 데이터의 단위를 굳이 따로 저장할까? var a = 1을 하였을때

@1004 (이름 : a, 값 :1 ) 을 하는 것이 할당 속도면에서 더 효율적이지 않을까(장점1)? 라는 의문이 생길 수 있다. 그러나 큰 값이 여러번 저장될때 예를들어 "매우매우긴문자열" 이라는 문자열을 매번 직접 값을 저장하는 방식을 사용하면 하나의 문자열을 계속해서 참조하는 방식에 비해 메모리를 더 차지하게 된다(단점1). 심지어 값을 비교하는 작업이 있다면 매우 긴 문자열의 값을 매 , 우, 매, 우,  긴, 문, 자, 열 로 하나하나 비교해야 해서 하나의 메모리 주소값만 비교하는 방식에 비해 오래걸린다(단점2).

현재 자바스크립트가 사용하고 있는 방식은 값을 한번 할당할때는 느리지만(단점1), 비교에 비용이 들지 않는다(장점1). 또한 할당한 값이 여러군데에서 중복해서 사용될 때에 메모리의 낭비가 적다(장점2).

그렇기때문에 단점보다 장점이 많은 현 자바스크립트의 방식을 자바스크립트는 채택한 것이다.

 

댓글을 작성해보세요.