[JavaScript] 원시 타입, 참조 타입, 원시 래퍼 타입
1. 원시 타입
있는 그대로 저장되는 데이터를 표현합니다. 객체가 아니면서 메서드도 가지지 않는 데이터입니다.
원시 타입의 종류
- 숫자(Number) : 정수, 부동 소수점 숫자를 나타내는 타입입니다.
- 문자열(String) : 텍스트를 나타내는 타입입니다.
- 불리언(Boolean): 참(true) 또는 거짓(false) 값을 나타내는 타입입니다.
- null: 값이 없음을 나타내는 타입입니다.
- undefined: 값이 정의되지 않음을 나타내는 타입입니다.
- 심볼(Symbol): 유일한 값으로 만들어지는 타입입니다. ES6부터 추가되었습니다.
원시 타입의 특징
-
불변성(Immutability): 원시 타입의 값은 변경할 수 없습니다. 변수에 새 값을 할당하면 이전 값을 덮어쓰게 되며, 이전 값을 변경할 수는 없습니다.
-
값 복사(Value copying): 변수에 원시 타입의 값을 할당할 때, 해당 값의 복사본이 변수에 저장됩니다. 따라서 변수 간의 값 비교는 변수에 저장된 값들의 비교로 이루어집니다.
-
크기 고정성(Fixed size): 원시 타입의 값은 고정된 크기를 가집니다. 이는 변수의 크기를 예측 가능하게 하며, 메모리를 더 효율적으로 사용할 수 있도록 합니다.
-
프로토타입 없음(No prototype): 원시 타입은 객체가 아니므로, 프로토타입 체인을 가지지 않습니다. 따라서 원시 타입의 값들은 메서드나 속성을 가지지 않습니다.
typeof
typeof 연산자는 피연산자의 평가 전 자료형을 나타내는 문자열을 반환합니다.
null의 타입에 유의합시다.
console.log(typeof 42); // "number"
console.log(typeof "blubber"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undeclaredVariable); // "undefined"
// This stands since the beggining of JavaScript
typeof null === "object";
console.log(typeof null); // "object"
2. 참조 타입
자바스크립트 객체를 나타냅니다.
참조 타입의 종류
-
객체 : {}
객체는 이름-값 쌍의 모음인 속성(property)들로 이루어져 있습니다. 객체는 중괄호({})로 둘러싸인 속성 리스트로 정의됩니다.
-
배열 : []
배열은 값의 목록으로 이루어져 있습니다. 배열은 대괄호([])로 둘러싸인 값의 리스트로 정의됩니다.
-
함수 : function
함수는 실행 가능한 코드 블록으로 이루어져 있으며, 함수를 호출하여 실행할 수 있습니다. 함수는 function 예약어로 정의됩니다.
-
날짜 : Date
날짜 객체는 날짜와 시간 정보를 제공합니다. 날짜 객체는 new Date() 생성자 함수를 사용하여 만들 수 있습니다.
-
정규 표현식 : RegExp
정규 표현식은 문자열에서 특정 패턴을 찾거나 바꾸는 데 사용됩니다. 정규 표현식은 슬래시(/)로 둘러싸인 패턴으로 정의됩니다.
-
맵 : Map
맵은 이름-값 쌍의 모음인 데이터를 저장할 수 있는 자료구조입니다. 맵은 키와 값이 연관된 컬렉션으로 구성됩니다.
-
셋 : Set
셋은 중복되지 않은 값을 모아놓은 컬렉션입니다. 셋은 유일한 값만을 가지는 컬렉션으로 구성됩니다.
이 외에도, Promise, Generator 등의 참조 타입이 있습니다. 원시 타입 빼고 전부 참조 타입으로 봐도 좋습니다.
참조 타입의 특징
자바스크립트의 참조 타입은 변수에 실제 데이터가 복사되는 것이 아니라 데이터가 저장된 메모리 주소가 복사됩니다. 따라서, 참조 타입 변수를 다른 변수에 전달하면, 전달된 변수는 같은 메모리 주소를 참조하게 됩니다.(Call by Reference)
3. 원시 래퍼 타입
원시 타입을 객체처럼 편리하게 사용하도록 감싸주는 객체입니다. 즉, 원시 데이터 타입의 값을 감싸서 객체로 만들어 주는 것입니다.
원시 래퍼 타입의 종류
원시 타입을 객체처럼 사용하는 순간, 자바스크립트 내부에서 사용하는 데이터의 인스턴스를 만들게 됩니다. 이렇게 만들어진 객체는 코드를 실행 후 바로 다음 줄에서 파괴됩니다. 이러한 과정을 오토박싱(autoboxing)이라고 합니다.
댓글남기기