가오리의 코딩일기
6장 데이터 타입 본문
✏️ 1과 '1'은 같을까?
→ 숫자 1은 산술 연산을 위해 생성하지만 문자 1은 텍스트를 화면에 출력하기 위해 생성한다
→ 확보해야 할 메모리 공간의 크기도, 메모리에 저장되는 2진수도, 읽어서 해석하는 방식도 모두 다르다
💡 숫자(number)타입
→ 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재
→ 다른 언어들은 int, long, float, double 등 다양한 숫자 타입을 제공하지만 자바스크립트는 아니다
→ 자바스크립트는 모든 수를 실수로 처리하기 때문에 정수만을 위한 타입이 없다
→ 정수로 표시된다 해도 실수이기 때문에 정수로 표시되는 수끼리 나누었을 때 실수가 나올 수 있다
→ 3가지 특별한 값 : Infinity(양의 무한대), -Infinity(음의 무한대), NaN(산술 연산 불가, Not a Number)
💡 문자열(string) 타입
→ 문자열, 텍스트 데이터를 나타내는 데 사용한다
→ 작은 따옴표(’’), 큰따옴표(””), 백틱(``)으로 텍스트를 감싼다
→ 자바스크립트의 문자열은 원시타입이며 변경 불가능한 값(immutable value)이다
(추가적인 설명은 11장 문자열과 불변성에서 알아보도록 하겠다)
💡 템플릿 리터럴(template literal)
→ 멀티라인 문자열(muti-line string), 표현식 삽입(expression interpolation), 태그드 템플릿(tagged template)
→ 편리한 문자열 처리 기능을 제공하고 런타임에 일반 문자열로 변환되어 처리된다
→ 템플릿 리터럴은 백틱을 사용해 표현한다
✏️ 멀티라인 문자열
→ 이스케이프 시퀀스(escape sequence)를 사용해야 한다
\0 | Null |
\b | 백스페이스 |
\f | 폼 피트(Form Feed),프린터로 출력할 경우 다음 페이지의 시작 지점으로 이동 |
\n | 개행, 다음 행으로 이동 |
\r | 개행, 커서를 처음으로 이동 |
\t | 탭(수평) |
\v | 탭(수직) |
\uXXXX | 유니코드 ex) \u0041 = ’A’ |
\’ | 작은 따옴표 |
\” | 큰 따옴표 |
\\ | 백슬래시 |
✏️ 표현식 삽입(expression interpolation)
→ 간단한 문자열 삽입, 문자열 연산자보다 가독성 좋고 간편하게 문자열을 조합할 수 있다
→ 표현식을 삽입하려면 ${}으로 표현식을 감싼다
→ 표현식 삽입은 반드시 템플릿 리터럴 내에서 사용해야 한다
→ 템플릿 리터럴이 아닌 일반 문자열에서의 표현식 삽입은 문자열로 취급된다
var first = 'ga';
var last = 'ori';
console.log('My name is '+first+' '+last+'.');
console.log(`My name is ${first} ${last}.`);
💡 불리언(boolean) 타입
→ 논리적 참과 거짓, true와 false뿐
→ 8장 조건문에서 자세히 알아보도록 하겠다
💡 undefined(정의되지 않은) 타입
→ var 키워드로 선언된 변수에 암묵적으로 undefined로 초기화된다
→ 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태로 두지 않고 자바스크립트 엔진이 undefined로 초기화한다
→ 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다
→ 변수에 값이 없다는 것을 명시하고 싶다면 undefined가 아닌 null을 할당하면 된다
💡 null 타입
→ 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
→ 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다
→ 변수에 null을 할당하는 것은 변수가 참조하던 값을 더 이상 참조하지 않겠다는 의미
→ 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미
💡심벌(symbol) 타입
→ ES6에서 추가된 7번째 타입, 변경 불가능한 원시 타입의 값
→ 다른 값과 중복되지 않는 유일무이한 값
→ 이름이 충돌한 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다
→ Symbol 함수를 호출해 생성하는데 이렇게 생성된 심벌 값은 외부에 노출되지 않는다
→ 33장 7번째 타입 symbol에서 자세히 알아보도록 하겠다
💡객체 타입
→ 자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 모든 것이 객체이다
→ 지금까지 살펴본 6가지 데이터 타입 이외에는 모두 객체 타입이다
→ 11장 원시 값과 객체의 비교에서 자세히 알아보도록 하겠다
💡 데이터 타입의 필요성
→ 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 경정하기 위해
→ 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
💡 동적 타이핑(dynamic/weak type)
✏️ 정적 타입(static/strong type) 언어
ex) C, C++, Java, Kotlin, Go, Rust, Scala 등
→ 명시적 타입 선언(explicit type declaration)
→ 변수 선언 시 데이터 타입을 사전에 선언해야 한다
→ 변수의 타입을 변경할 수 없으며 변수에 선언한 타입에 맞는 값만 할당할 수 있다
✏️ 동적 타입(dynamic/weak type) 언어
→ 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다
→ 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다
→ 이런 특징을 동적 타이핑이라고 한다
→ 값의 변경에 의해 타입도 언제든지 변경될 수 있다
→ 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다
→ 유연성(flexibility)은 높지만 신뢰성(reliability)은 떨어진다
💡 타입변환
✏️ 명시적 타입 변환(Explicit coercion) 또는 타입 캐스팅(Type casting)
→ 개발자에 의해 의도적으로 값의 타입을 변환하는 것
✏️ 암묵적 타입 변환(Implicit coercion) 또는 타입 강제 변환(Type coercion)
→ 자바스크립트는 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환
// Q1. 문자열 따옴표
let name = "Ilya";
alert( `hello ${1}` ); // hello 1 : number
alert( `hello ${"name"}` ); // hello name : answkduf
alert( `hello ${name}` ); // hello Ilya
// 표현식에 name라는 변수가 있다 이 name이라는 변수가 평가되어야 전체 문자열을 반환할 수 있다
'HTML+CSS+JavaScript > DeepDive' 카테고리의 다른 글
7장 연산자: 코어 자바스크립트2 (0) | 2022.07.28 |
---|---|
7장 연산자: 코어 자바스크립트1 (0) | 2022.07.26 |
7장 연산자 (0) | 2022.07.26 |
5장 표현식과 문 (0) | 2022.07.13 |
4장 변수와 상수 (0) | 2022.07.10 |