[JS] 데이터 타입

Pavel_Dmr·2022년 6월 16일
0

JavaScript

목록 보기
1/9

데이터 타입(data type)이란 프로그램에서 다룰 수 있는 값의 종류를 의미합니다.

자바스크립트에서는 여러 가지 형태의 타입을 미리 정의하여 제공하고 있으며, 이것을 기본 타입이라고 합니다.

자바스크립트의 기본 타입은 크게 원시 타입과 객체 타입으로 구분할 수 있습니다.

원시 타입(Primitive type)

객체를 제외한 모든 타입은 불변 값(변경 불가능한 값)을 정의합니다.

예를 들어, 문자열은 불변합니다. 이런 타입을 "원시 타입"이라고 합니다.

원시 타입에서 불변성은 변수의 내용을 수정할 수 없다는 뜻은 아니고,
변경가능성 대상이 값이 될수 없다는 뜻이다.

원시 타입 변수가 값을 참조 해오는 데이터 영역에서는,
만약 변수의 재할당이 이루어지면 새로운 주소 영역에 데이터를 할당한다.

변수 a을 선언해 문자열 값 "abc"을 선언하고, 다시 "abcdef"로 재선언하면,

값이 수정 되는 것이 아니라 데이터 영역에 abcdef 값을 새로 선언하고,
변수 a에서는 데이터 영역에서 값을 참조해오는 주소값만 바뀐다.
한마디로 변경을 한게 아니라, 값을 새로 만들어서 받아오는 위치만 바꾼것이다.

이런식으로 데이터 할당을 하는데는 두 가지 이유가 있는데 다음과 같다.

1. 데이터 변환을 해야할 때

변수 영역 내에서 데이터을 저장하는 경우,
변수 a에 "abc" 값이 할당 되어있고, "abcdef" 값으로 재할당 하려고할때,

변수 영역 내 데이터 공간이 부족하면 데이터 공간을 재할당을 해야하는데,
변수 a가 만약 메모리상 중간에 위치한다면, a 뒤의 데이터 영역을 전부 뒤로 밀고 재할당을 해야하는 비효율적인 일이 생긴다.

고로 데이터 영역을 따로 나누어 데이터을 선언하고, 변수 영역에서는 주소값만 참조 해 값을 받는 것이 이상적이다.

2. 여러개의 변수에 똑같은 데이터를 할당할 때

100개의 변수에 만약 같은 값을 할당하는 경우,

100개의 변수에 8byte 크기의 숫자형 자료형을 일일이 저장하면 100 * 8 = 800byte를 사용해야하는데

값을 별도의 데이터 영역에 한번만 저장하고, 100개의 변수가 해당 값은 참조하면, 훨씬 적은 공간으로 데이터를 다룰 수 있다.

참조 타입(Reference type)

참조, 객체 타입은 특정 데이터와 그 데이터에 관련한 동작,행동 (절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재이다.

달리 말해, 성질(프로퍼티)과 방법(메소드)을 포함할 수 있는 독립적 주체이다.(묶음)

JS는 객체 기반의 스크립트 언어로써
JS를 이루는 대다수는 객체로 이루어진다.

원시 타입을 제외한 나머지 값(배열, 함수, 정규표현식)은 모두 객체입니다.

또한 객체는 참조에 의한 전달(Pass-By-Reference) 방식으로 전달됩니다.

객체 타입에서는 데이터를 다루는데 있어서 가변성(특정 조건 아래에 변경이 가능)의 성질을 띈다.

참조,객체 타입에서는 데이터를 다룰때는 원시타입과 조금 다르다.

원시타입에서는 하나의 데이터만을 참조하지만,
객체 타입내 에서는 특정 행동,의미,기능을 소유하기 위해서 여러 데이터을 가지고 있는데,

객체배열 obj1이 있고, 내부 변수로 a,b가 있으면,

데이터 영역에서는 a,b의 데이터 값을 할당하고, obj1만의 변수 영역에 a,b가 데이터로써 존재하고, a,b는 데이터 영역에서 값을 참조해온다.

그리고 obj1은 변수영역 자체를 참조해와 데이터을 다룬다.

객체타입은 가변성이 있다고 했는데, 객체 변수내에 원시타입 변수을 수정 할때는 불변성을 그대로 유지한다.

하지만 객체 변수 자체을 재선언하면, 이런 식으로 데이터을 조정하게 된다.

객체 변수 자체을 재선언했기때문에, 전에 있던 변수 영역을 버리고, 새 영역을 만든 뒤, 다시 참조 해왔다.

profile
노는게 좋아

0개의 댓글