[JavaScript] 데이터 타입의 종류 및 참조 타입에 대해

박용희·2023년 8월 21일
0

[JavaScript] 데이터 타입의 종류 및 참조 타입에 대해

원시 데이터 타입 (Primitive Data Types):

원시 데이터 타입은 값 자체가 변수에 저장되며, 변수 사이에 값이 복사될 때 실제 데이터가 복사됩니다.

이러한 데이터 타입은 불변(immutable)하다는 특징을 가지며, 값을 변경하려면 새로운 값을 할당해야 합니다.

원시 데이터 타입의 종류

숫자(Number): 정수와 부동소수점 숫자를 포함합니다. 예: 42, 3.14.

문자열(String): 문자들의 시퀀스입니다. 작은따옴표나 큰따옴표로 둘러싸인 텍스트입니다. 예: 'Hello, world!'.

불리언(Boolean): true나 false 값을 가집니다. 조건식 평가 등에 사용됩니다.

null: 값이 없음을 나타냅니다. 변수에 명시적으로 값을 주지 않을 때 자동으로 할당됩니다.

undefined: 값을 할당하지 않은 변수의 초기값입니다. 또는 함수 내에서 반환값이 없는 경우의 기본 반환값입니다.

심볼(Symbol): 유일한 식별자를 생성하는 데 사용되는 원시 값입니다. 주로 객체 속성의 키로 사용됩니다.

복합 데이터 타입 (참조 타입, Reference Data Types)

avaScript의 복합 데이터 타입은 객체와 배열을 포함합니다.
이러한 데이터 타입은 값 대신 메모리 주소(참조)를 가리키며, 변수에 할당할 때 메모리 주소가 할당됩니다.

복합 데이터 타입은 변수에 메모리 주소(참조)가 할당되며, 변수 간에 복사될 때 메모리 주소가 복사됩니다.
따라서 여러 변수가 동일한 객체나 배열을 참조할 수 있습니다. 이로 인해 한 변수에서 객체나 배열의 내용을 변경하면, 모든 해당 변수에서 변경 내용을 볼 수 있습니다.

복합 데이터 타입의 종류

객체(Object): 여러 속성(key-value 쌍)을 포함하는 데이터 구조입니다. 객체의 속성은 다양한 데이터 타입을 포함할 수 있습니다.

배열(Array): 값의 목록으로, 순서에 따라 접근할 수 있는 인덱스를 가지고 있습니다. 모든 원소가 동일한 데이터 타입일 필요는 없습니다.

함수(Function): 코드 블록을 나타내며, 재사용 가능한 작업 단위입니다.

날짜(Date): 특정 날짜와 시간 정보를 나타내는 객체입니다.

데이터 복사(Copy)에 대해

원시 데이터 타입 (Primitive Data Types)

let name1 = "kim";
let name2 = name1;
name1 = "park";
console.log(name1); // park
console.log(name2); // kim

원시 데이터 타입은 값 자체가 변수에 저장되며, 변수 사이에 값이 복사될 때 실제 데이터가 복사됩니다.
따라서 name1과 name2는 각각 서로 다른 데이터값을 가지게 됩니다.

복합 데이터 타입 (참조 타입, Reference Data Types)

const person1 = { name: "kim" };
const person2 = person1;
person1.name = "park";
console.log(person1.name) // park
console.log(person2.name) // park

복합 데이터 타입은 변수에 메모리 주소(참조)가 할당되며, 변수 간에 복사될 때 메모리 주소가 복사됩니다.

참조 타입에서 변수에 할당되는 메모리 주소는 힙(heap)이라는 메모리 영역에 할당됩니다.

따라서 여러 변수가 동일한 객체나 배열을 참조할 수 있습니다.

복합 데이터 타입 비교 연산

const person1 = { name: "kim" };
const person2 = { name: "kim" };

console.log(person1 == person2); // false
console.log(person1 === person2); // false

객체의 내용이 동일하더라도, 이들은 서로 다른 메모리 주소를 가지기 때문에 엄연히 다른 객체입니다.

따라서 두 객체 간의 일치 비교(===)나 동등 비교(==)는 모두 false를 반환합니다.

0개의 댓글