[JavaScript] 01. 데이터 타입
코어 자바스크립트를 공부한 내용을 정리
01. 데이터 타입
-
데이터 타입의 종류 ?
-
기본형primitive type : number, string, boolean, null, undefined, Symbol
-
심볼 타입
- ES6에서 추가된 7번째 타입
- 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값
var key = Symbol('key'); var obj = {}; obj[key] = 'value'; console.log(obj[key]); //value
-
값이 담긴 주솟값을 바로 복제
-
불변성immutability
-
-
참조형reference type : Object, Array, Function, Date, RegExp, Map, Set
- 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제
- 가변성mutability
-
-
메모리와 데이터
- 비트
- 0또는 1로만 표현할 수 있는 하나의 메모리 조각
- 고유한 식별자를 통해 위치를 확인할 수 있음
- 바이트
- 8bit로 구성
- 시작하는 비트의 식별자로 위치를 파악할 수 있음
- 모든 데이터는 바이트 단위의 식별자, 메모리 주솟값 을 통해 서로 구분하고 연결됨
- 비트
-
식별자와 변수
- 변수
- 변할 수 있는 데이터
- 식별자
- 어떤 데이터를 식별하는데 사용하는 이름 -> 변수명
- 변수
-
변수 선언과 데이터 할당
-
변수 선언
var a; => 변할 수 있는 데이터를 만들고, 이 데이터의 식별자는 a가 된다
-
변수 : 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇
-
데이터 할당
var a; a = 'abc'; var a = 'abc';
- 위 두 방법은 같은 동작을 수행
- a는 임의의 주소에 이름과 값이 할당되고, 이 값은 실제 데이터가 할당 되어 있는 주소를 가리킴
- a가 가리키는 주소에 'abc'를 데이터로 할당됨
- 변수 영역에 값을 직접 대입하지 않는 이유?
- 데이터 변환을 자유롭게 할 수 있고 메모리를 더 효율적으로 관리할 수 있음
- 가변적인 데이터 변환을 처리하려면 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적
- 변수 영역과 데이터 영역을 분리하면 중복된 데이터에 대한 처리 효율이 높아짐
- 위 두 방법은 같은 동작을 수행
-
-
기본형 데이터와 참조형 데이터
- 불변값
- 변수와 상수 : 구분하는 성질은 변수 영역 메모리의 '변경 가능성'
- 불변과 가변 : 구분하는 성질은 데이터 영역 메모리의 '변경 가능성'
- 불변값
- 기본형 데이터 : 숫자, 문자열, boolean, null, nudefined, Symbol
- 변경은 새로 만드는 동작을 통해서만 이루어짐
- 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않음
- Garbage Collector ?
- 가변값
- 보통의 참조형 데이터 : object, array 등
- 데이터 영역에 저장된 값은 불변값이지만, 변수에는 다른 값을 얼마든지 대입할 수 있음
- 참조 카운트 : 어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수
- 참조 카운트가 0인 메모리 주소는 가비지 컬렉터의 수거 대상이 됨
- 변수 복사 비교
- 자바스크립트의 모든 데이터 타입은 참조형 데이터
- 기본형 : 주솟값을 복사하는 과정이 한 번만 이루어지기 때문에 복사한 값이 변했을 때도 원본은 유지됨
- 참조형 : 참조형 데이터 자체를 변경할 경우에는 기본형과 똑같이 기존 데이터는 변하지 않지만, 그 내부의 프로퍼티를 변경하면 원본이 함께 변경됨
- 불변값
-
불변 객체
- 불변 객체를 만드는 가장 간단한 방법 ? 객체를 복사할 때, 새로운 객체를 만들어 리턴해주기
- 얕은 복사와 깊은 복사
- 깊은 복사를 위해서는 기본형 데이터일 경우에는 그대로 복사하면 되지만, 참조형 데이터는 다시 그 내부의 프로퍼티들을 복사해야 함
- 깊은 복사 방법
- 참조형 데이터가 있을 때마다 내부 프로퍼티들을 순회하며 재귀적으로 함수를 호출하는 방법
- JSON 활용하기
- But,
메서드
나__proto__
,getter/setter
등과 같이 JSON으로 변경할 수 없는 프로퍼티들은 무시함 httpRequest
로 받은 데이터를 저장한 객체를 복사할 때 등 순수한 정보만 다룰 때 활용하기 좋음
- But,
-
undefined와 null
- undefined
- 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 JS 엔진이 자동으로 부여하는 경우도 있음
- 값을 대입하지 않은 변수(var)에 접근할 때
- 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
- return 문이 없거나 호출되지 않는 함수의 실행 결과
- '비어있는 요소'와 달리 'undefined를 할당한 요소'는 순회와 관련된 많은 배열 메서드들의 순회 대상에 포함됨
- 비어있는 요소는 값이 지정되지 않은 인덱스이므로 '존재하지 않는 프로퍼티'에 지나지 않음
- 직접 undefined를 할당하는 것을 피하는 것을 추천함
- 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 JS 엔진이 자동으로 부여하는 경우도 있음
- null
- 값이 없음을 나타내고자 할 때는 null을 사용하는 것을 권장
- 이 규칙을 따르는 한 undefined는 '값을 대입하지 않는 변수에 접근하고자 할 때 자바스크립트 엔진이 반환해주는 값'으로서만 존재할 수 있음
- typeof 를 사용했을 때 object로 나타나는 자바스크립트 자체 버그가 있음
- null 여부를 판단하기 위해서는 일치 연산자(===)를 써야 정확히 판단이 가능
- 값이 없음을 나타내고자 할 때는 null을 사용하는 것을 권장
- undefined
Author And Source
이 문제에 관하여([JavaScript] 01. 데이터 타입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rkd028/JavaScript-01.-데이터-타입저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)