본문 바로가기

개발자 페이지/Javascript

01 데이터타입 by 코어 자바스크립트

728x90
반응형

아래 내용은 '코어 자바스크립트' 정재남 저 | 위키북스의 내용을 발췌한 것으로 

 자세한 내용은 해당 서적을 확인 바랍니다.

 

1. variable & identifier (변수 & 식별자)

variable(변수)는 '변할 수 있는 수' 로 변할수 있는 데이터를 뜻한다;. 숫자도 데이터, 문자열, 객체, 배열 모두 데이터.

identifier (식별자)는 어떤 데이터를 식별하는데 사용하는 이름, 즉 변수명이다.

 

2. 변수 선언

var a;

변수 선언은 "변할 수 있는 데이터를 만든다. 이 데이터의 식별자는 a로 한다."

 

변수 ▶ 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇

 

이공간에 숫자를 담았따가 문자열을 담는 등의 다양한 명령을 내릴 수 있다.

임의의 빈 공간 1003번 주소를 선택, 이 공간의 이름(식별자)을 a라고 지정하는 과정을 변수 선언 과정이라 한다.

이후 a에 접근하고자 하면 컴퓨터는 메모리에서 a라는 이름을 가진 주소를 검색 후 안에 담긴 데이터를 반환할 것이다.

Q: 왜 변수 영역에 값을 직접 대입하지 않고 굳이 번거롭게 한 단계를 거치는 이유 ?

A: 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위한 고민의 결과이다.

Javascript는 숫자형 데이터에 대해 64bit(8byte)의 공간을 확보하는데, 문자열에는 특별히 정해진 규칙이 없다.

한 글자마다 영어는 1byte, 한글은 2byte 등으로 각각 필요한 메모리 용량이 가변적이며

전체 글자 수 역시 가변적이기 때문이다.

변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적이다. (중복된 데이터에 대한 처리 효율도 높아진다)

 

3. 불변값

variable (변수)와 constant (상수)를 구분하는 성질은 "변경 가능성"이다. 

바꿀 수 있으면 변수, 바꿀 수 없으면 상수이다. 불변값과 상수를 같은 개념으로 오해하기 쉬운데, 이둘을 명확히 구분할 필요가 있다. 변수와 상수를 구분 짓는 변경 가능성의 대상은 변수영역 메모리이다. 

 

변경은 새로 만드는 동작을 통해서만 이뤄지며, 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다. (영원히라는 말은 엔트로피의 영향력안에 의미없는 표현이다, 메모리 또한 엔트로피의 불안정영역으로 끝없이 분해되고 해체되어 그 값이 사라지게 될 것이기 때문이다. 이상 TMI)

 

4. 가변값

기본형 데이터는 가변값인 경우가 많으나 설정에 따라 변경 불가능한 경우도 있고, 아예 불변값으로 활용하는 방안도 있다.

기본형 데이터와의 차이는 '객체의 변수(Property) 영역이 별도로 존재한다는 점이다.

데이터 영역에 저장된 값은 모두 불변값이며, 변수에는 다른 값을 얼마든지 대입할 수 있다. 

 

어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수를 참조 카운트라고 한다, 참조 카운트가 0인 메모리 주소는

가비지 컬렉터(garbage collector, GC)의 수거 대상이 되며, GC는 런타이 환경에 따라 특정 시점이나 메모리 사용량이 포화 상태에 임박할 때마다 자동으로 수거 대상들을 수거한다. 수거된 메모리는 다시 새로운 값을 할당할 수 있는 빈 공간이 됨.

 

@5006에 저장된 'str'의 주소를 @7104에 저장됨으로써 기존의 데이터값인 @5003과 그를 참조하던 @8104~8106 데이터가 GC 대상이 되게 된다.

 

5. 기본형 데이터 VS 참조형 데이터 차이 (변수 복사 비교)

기본형 데이터를 복사한 변수 b의 값을 바꾸면 @1002의 값이 달라진 반면, 

참조형 데이터를 복사한 변수 obj2 의 프로퍼티의 값을 바꾸었더니 @1004의 값은 달라지지 않았다.

이 결과가 바로 기본형과 참조형 데이터의 가장 큰 차이점이다.

 

대부분 자바스크립트 책에서 '기본형은 값을 복사하고 참조형은 주솟값을 복사한다'고 설명하고 있지만, 사실은 어떤 데이터 타입이든 변수에 할당하기 위해서는 주솟값을 복사해야 하기 때문에, 엄밀히 따지면 자바스크립트의 모든 데이터 타입은 참조형 데이터일 수밖에 없다. 

 

다만 기본형은 주솟값을 복사하는 과정이 한 번만 이뤄지고, 참조형은 한 단계를 더 거치게 된다는 차이가 있다.

이러한 내부 원리를 잘 이해하는 것은 향후 중급 개발자로 성장하는 과정에서 더 큰 혼란을 느끼지 않기 위한 중요한 초석.

 

728x90