모던 자바스크립트 딥다이브, 면접과 함께 공부하기 - 06장 데이터 타입

지인·2023년 7월 7일
0

DeepDive

목록 보기
3/17
post-thumbnail

💡 아래 내용은 모던 자바스크립트 딥다이브를 공부하며 이해했던 내용을 다루고 있습니다. 혹시 틀렸거나 잘못된 정보가 있다면 알려주세요!

📌 06장 데이터 타입

6.1 숫자 타입

JS에서 숫자 타입은 int와 float를 구분하지 않고 모두 하나의 숫자 타입으로 취급합니다.

6.2 문자열 타입

문자열은 텍스트 데이터를 나타내는 데 사용되며, 작은따옴표(' '), 큰따옴표(" "), 백틱(``)으로 둘러싸여 표현됩니다. 문자열은 불변하므로 한 번 생성된 문자열은 수정할 수 없습니다.

문자열 타입이 "불변"하다는 게 무슨 뜻인가요?

문자열 타입이 불변하다는 것은 한 번 생성된 문자열의 값은 변경할 수 없다는 의미입니다. 즉, 한 번 생성되면 수정할 수 없고, 수정하려면 새로운 문자열을 생성해야합니다. 이러한 특성 때문에 참조 유지가 발생합니다.

참조 유지가 뭔가요?

참조 유지란, 문자열 변수에 새로운 값을 할당하면 이전 문자열의 참조는 끊어지고, 새로운 문자열의 참조가 변수에 할당되는 것을 의미합니다.

let str1 = 'Hello';
let str2 = str1; // str1의 참조를 str2에 할당
str1 = 'Hi'; // str1의 값 변경
console.log(str1); // 출력: Hi
console.log(str2); // 출력: Hello (str1과 str2는 독립적)

자주 쓰이는 내장 함수에는 어떤 게 있나요?

length, slice, toUpperCase가 있습니다.

문자열은 데이터 타입인데 어떻게 내장 함수를 사용할 수 있나요?

자바스크립트는 문자열 리터럴에 대해 임시적으로 객체로 변환하여 내장 함수와 속성에 접근할 수 있도록 합니다.

6.3 템플릿 리터럴

ES6부터 도입된 스펙입니다. ``(백틱)으로 사용할 수 있으며, 멀티라인 문자열, 표현식 삽입과 같은 편리한 문자열 처리 기능을 제공합니다. 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리됩니다.

6.3.1 멀티라인 문자열

\n 없이 줄바꿈(enter)를 입력하면 자동 줄바꿈을 지원합니다.

const message = `
This is a multi-line
string using template literals.
`;

6.3.2 표현식 삽입

템플릿 리터럴 안에 ${변수}의 형식으로 변수를 문자열에 삽입할 수 있습니다.

const name = 'Alice';
const message = `Hi, ${name}`;
console.log(message);

6.4 불리언 타입

불리언 타입은 true, false의 값으로 이루어져있습니다.

6.5 undefined 타입

undefined는 값이 할당되지 않은 상태를 나타내는 타입입니다. null과 달리 undefined는 명시적으로 할당하는 것이 아닌 자동으로 생성되는 값입니다.

let x;
const obj = {};
function doSomething() {
}

const result = doSomething();

console.log(x);  // undefined
console.log(obj.prop);  // undefined
console.log(result);  // undefined

6.6 null 타입

null은 값이 없음을 나타내는 특별한 데이터 타입입니다. 객체가 아닌 원시 데이터 타입이지만, typeof 연산자를 사용하여 null을 확인하면 object가 반환되는데, 이는 오류입니다. 또한 주의할 점은 nullundefined와는 다른 개념이며, 두 개의 타입은 서로 다른 상황에서 사용됩니다. null은 값이 없음을 명시적으로 지정하는 반면, undefined는 변수에 값을 할당하지 않거나, 객체 속성이나 배열 요소가 존재하지 않는 경우에 자동으로 할당되는 값입니다.

6.7 심볼 타입

ES6에서 추가된 타입으로, 다른 값과 중복되지 않는 유일하고 변경 불가능한 데이터 타입입니다. 보통 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용됩니다. 아래는 심볼의 생성과 객체의 키로 사용하는 예시입니다.

// 심벌 값 생성
let key = Symbol('key');

// 객체 생성
let obj = {};

// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value

// 같은 형태로 생성해도 다른 값이다
Symbol('a') === Symbol('a') // false

심볼은 어떻게 유일한 값이 보장되는 건가요?

심볼 레지스트리에 의해 보장됩니다. 심볼을 생성할 때마다 레지스트리에 등록되며, 동일한 설명을 가진 심볼이라도 레지스트리에서는 항상 다른 값으로 취급됩니다.

심볼 레지스트리가 뭔가요?

심볼 레지스트리는 심볼을 중앙 집중화하여 관리하는 내장된 레지스트리입니다. 이 레지스트리는 전역적으로 접근 가능하며, 고유한 심볼을 생성하고 전역적으로 검색하는 데 사용됩니다.

6.8 객체 타입

객체 타입은 여러 개의 속성과 메서드를 포함하는 컨테이너로 사용되는 데이터 타입입니다. 객체는 복합적인 데이터를 표현하고 처리하는 데 사용됩니다. 객체는 다음과 같은 특징을 가지고 있습니다.
1. 속성 접근
2. 속성 추가/수정/제거
3. 메서드 (객체 안에 함수를 가질 수 있다.)

6.9 데이터 타입의 필요성

6.9.1 데이터 타입에 의한 메모리 공간의 확보와 참조

데이터 타입에 따라 할당되는 메모리의 크기가 다르기때문에, 데이터 타입에 따라 값을 참조하는 방식이 다르기 때문에 효율적인 메모리 관리를 위해 데이터 타입이 필요합니다.

6.9.2 데이터 타입에 의한 값의 해석

데이터 타입에 따라 연산자나 함수의 동작이 달라지기때문에, 데이터 타입이 필요합니다.

6.10 동적 타이핑

동적 타이핑이란, 변수의 데이터 타입을 명시적으로 선언하지 않고, 실행 중 할당된 값에 따라 타입이 동적으로 결정된다는 것을 의미합니다. 유연하고 편리하지만, 안정성이 낮기때문에 최근에는 TypeScript를 사용한 정적 타이핑이 더 선호됩니다.

profile
안녕하세요

0개의 댓글