1. 데이터 타입
데이터 타입에는 기본형과 참조형이 있다.
기본형과 참조형 모두 주소값을 복제한다.
기본형은 주소값을 바로 복제 참조형은 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
1-2-2 식별자와 변수
변수는 변할 수 있는 무언가인다. 무언가라는 것은 데이터 식별자는 어떤 데이터를 식별하는데 사용하는 변수명
1-3-1 변수 선언
메모리상에 어떻게 할당되는지 알아보자.
메모리는 다음 영역을 가진다.
변수영역
주소
이름
값
데이터영역
값 : 주소값 범위, 주소값
각 영역은 주소값과 데이터를 가진다.
변수 영역에서 빈 공간을 확보한다.
확보한 변수 영역 공간에서 식별자를 a로 지정
데이터 영역의 빈공간에 문자열 'abc'를 저장
변수 영역에서 a 식별자를 검색
'abc' 문자열 주소를 식별자 a의 값에 저장.
여기서 다음과 같이 재할당하는 코드 작성하면
'abcdef' 문자열 새로 만들어 별도 공간에 저장
식별자 a의 주소값에 'abcdef' 주소값을 할당
왜 변수 영역과 데이터 영역을 나눴을까? 예컨대, 5라는 값을 500개의 변수에 저장한다 하자. 영역이 하나라면, 변수 500개를 위한 공간과 매 변수 공간마다 5를 할당해야하기 때문에 불필요한 중복이 발생한다. 변수/데이터 영역 2개로 관리하면 변수는 5라는 데이터 영역의 주소값만 저장하면 매번 5를 만들어서 할당할 필요가 없다.
1-4-1 불변값 (immutable)
기본형 데이터는 불변이다. 왜냐하면 위와 같이 a의 값잉 변경되는 상황에서 기존 데이터를 변경하는게 아닌, 매번 새로 할당하기 때문이다.
1-4-2 가변값 (mutable)
참조형 데이터는 모두 가변이다.
참조형 데이터는 별도의 변수영역을 하나 더 만든다. 왜냐하면 obj1은 여러 개의 프로퍼티로 이뤄진 데이터 그룹이기 때문이다.
위 코드가 실행되어도 obj1의 주소값은 변경되지 않는다. obj.a의 주소값만 변경되었다.
undefined와 null
undefined는
사용자가 직접 지정 가능
값이 존재하지 않을 때 JS 엔진이 자동 부여
값을 대입하지 않은 변수
데이터 영역의 메모리 주소를 지정하지 않은 식별자
객체 내부의 존재하지 않는 프로퍼티 접근
return 문이 없거나 호출되지 않는 함수의 실행 결과
null은 비어있음을 명시적으로 나타내고 싶을 때.
null은 object이기 때문에 typeof 접근이 아닌 === null로 접근
QNA
Q. 변수를 값없이 선언시 메모리상에 발생하는건? A. 변수영역 공간에 식별자에 변수명을 저장하고, 값은 undefined를 JS 엔진이 자동 할당.
Q. 참조형 데이터와 기본형 데이터의 차이는? A. 기본형은 불변, 참조형은 가변. 참조형은 여러개의 프로퍼티를 모은 그룹이다. 객체의 변수영역이 따로 있는데, 이 객체의 프로퍼티 값을 수정할 경우, 객체의 주소값잉 변경되지 않고 객체 변수영역의 주소값만 변경된다. 그래서 mutable하다.
Q. undefined와 null의 차이점은? A. 개발자가 직접 명시했냐 아니냐의 차이다. 둘 다 직접 명시할 수 있다. 하지만 undefined의 경우 JS 엔진이 자동으로 부여하는 경우가 있다. 그래서 값이 없음을 명시적으로 표현하기 위해서는 null을 사용하는 것이 권장된다.
Last updated
Was this helpful?