원시 타입(Primitive Types)
TypeScript에서는 다양한 원시 타입(primitive types)을 제공한다. 원시 타입은 JavaScript와 유사하며, 변수에 단순한 데이터 값을 저장하는 데 사용된다.
- Number
- String
- Boolean
- Null & Undefined
- Symbol
- Bigint
이러한 원시 타입들은 변수에 할당되는 값의 타입을 명시하는 데 사용된다. TypeScript는 이러한 원시 타입에 대한 타입 추론을 자동으로 수행하므로, 변수에 값을 할당하면 해당 변수의 타입이 자동으로 결정된다.
String
String은 문자열을 나타내는 자료형으로, TypeScript에서 기본 자료형 중 하나다.
String 변수는 문자열을 저장하고 처리할 수 있다.
아래는 TypeScript에서 String을 사용한 예시 코드다.
let name: string = "John"; // name 변수는 "John"이라는 문자열을 가진다.
let message: string = `Hello, ${name}!`; // message 변수는 "Hello, John!"이라는 문자열을 가진다.
function printMessage(msg: string): void {
console.log(msg);
}
printMessage(message); // "Hello, John!"이라는 문자열이 출력된다.
위 코드에서 name 변수는 "John"이라는 문자열을, message 변수는 템플릿 문자열을 사용하여 "Hello, John!"이라는 문자열을 생성한다. printMessage 함수는 문자열을 인자로 받아서 콘솔에 출력하는 역할을 한다. 이 함수를 호출하여 message 변수에 저장된 문자열을 출력하면, "Hello, John!"이라는 문자열이 출력된다.
String은 문자열 연산에서 자주 사용된다. 예를 들어, 두 개의 문자열을 이어붙이는 것은 일반적인 연산이다.
TypeScript에서는 + 연산자를 사용하여 두 문자열을 이어붙일 수 있다. 아래는 + 연산자를 사용하여 두 문자열을 이어붙이는 예시 코드다.
let greeting: string = "Hello, ";
let name: string = "John";
let message: string = greeting + name;
console.log(message); // "Hello, John"이라는 문자열이 출력된다.
위 코드에서, greeting 변수는 "Hello, "이라는 문자열을, name 변수는 "John"이라는 문자열을 가지고 있다. greeting과 name 변수를 + 연산자로 이어붙여 message 변수에 할당하고, 마지막으로 console.log 함수를 사용하여 message 변수의 값을 출력한다.
String 자료형에서는 다양한 메소드와 속성을 사용할 수 있다. 예를 들어, 문자열의 길이를 구하는 것은 일반적인 연산이다. TypeScript에서는 length 속성을 사용하여 문자열의 길이를 구할 수 있다. 아래는 length 속성을 사용하여 문자열의 길이를 구하는 예시 코드다.
let message: string = "Hello, World!";
let length: number = message.length;
console.log(`문자열 "${message}"의 길이는 ${length}이다.`); // "문자열 "Hello, World!"의 길이는 13이다." 라는 문자열이 출력된다.
위 코드에서, message 변수는 "Hello, World!"이라는 문자열을 가지고 있다. length 변수에는 message 변수의 길이인 13이 할당된다. 마지막으로, console.log 함수를 사용하여 문자열과 함께 length 변수의 값을 출력한다.
Number
Number는 숫자를 나타내는 자료형으로, TypeScript에서 기본 자료형 중 하나이다.
Number 변수는 정수, 부동 소수점 등의 값을 가질 수 있다.
아래는 TypeScript에서 Number를 사용한 예시 코드다.
let age: number = 30; // age 변수는 30이라는 값을 가진다.
let height: number = 1.75; // height 변수는 1.75라는 값을 가진다.
function addNumbers(num1: number, num2: number): number {
return num1 + num2;
}
let result: number = addNumbers(10, 20); // result 변수는 30이라는 값을 가진다.
위 코드에서 age 변수와 height 변수는 각각 정수형과 부동 소수점형의 값을 가지고 있다. addNumbers 함수는 두 개의 숫자를 더하여 결과를 반환한다. 이 함수를 호출하여 반환된 값을 result 변수에 저장하면, 30이라는 값이 할당된다.
Number는 수학적 연산에서 자주 사용된다. 예를 들어, 두 개의 숫자를 더하는 것은 일반적인 연산이다. TypeScript에서는 +, -, *, /와 같은 산술 연산자를 사용하여 두 숫자를 연산할 수 있다. 아래는 산술 연산자를 사용하여 두 숫자를 더하는 예시 코드다.
let num1: number = 10;
let num2: number = 20;
let sum: number = num1 + num2;
console.log(`두 수의 합은 ${sum}이다.`); // "두 수의 합은 30이다." 라는 문자열이 출력된다.
위 코드에서, num1 변수와 num2 변수는 각각 10과 20의 값을 가지고 있다. sum 변수에는 두 변수의 값을 더한 결과인 30이 할당된다. 마지막으로, console.log 함수를 사용하여 문자열과 함께 sum 변수의 값을 출력한다.
Number 자료형에서는 다양한 연산을 수행할 수 있다. 예를 들어, Math 객체를 사용하여 수학 함수를 호출할 수 있다. 아래는 Math 객체를 사용하여 제곱근을 계산하는 예시 코드다.
let x: number = 16;
let sqrt: number = Math.sqrt(x);
console.log(`16의 제곱근은 ${sqrt}이다.`); // "16의 제곱근은 4이다." 라는 문자열이 출력된다.
위 코드에서, x 변수는 16의 값을 가지고 있다. Math.sqrt 함수를 사용하여 x 변수의 제곱근을 계산하고, 이 결과를 sqrt 변수에 할당한다. 마지막으로, console.log 함수를 사용하여 문자열과 함께 sqrt 변수의 값을 출력한다.
Boolean
Boolean은 참과 거짓을 나타내는 자료형으로, TypeScript에서는 기본 자료형 중 하나이다.
Boolean 변수는 true나 false 중 하나의 값을 가질 수 있다.
아래는 TypeScript에서 Boolean을 사용한 예시 코드다.
let isFinished: boolean = false; // isFinished 변수는 false 값을 가진다.
let isLoggedIn: boolean = true; // isLoggedIn 변수는 true 값을 가진다.
function hasAccess(permission: string): boolean {
if (permission === 'admin') {
return true;
} else {
return false;
}
}
let isAdmin: boolean = hasAccess('admin'); // isAdmin 변수는 true 값을 가진다.
let isUser: boolean = hasAccess('user'); // isUser 변수는 false 값을 가진다.
위 코드에서 isFinished와 isLoggedIn 변수는 각각 false와 true 값을 가지고 있다. hasAccess 함수는 문자열 파라미터를 받아 이 값이 'admin'인 경우에만 true를 반환하고, 그 외에는 false를 반환한다. 이 함수를 호출한 결과 값을 isAdmin과 isUser 변수에 저장하면, 각각 true와 false 값을 가지게 된다.
Boolean은 조건문에서 자주 사용된다. 예를 들어, if문에서 Boolean 값을 검사하여 해당 조건에 따른 동작을 수행하는 것이 일반적이다. 아래는 Boolean 값을 검사하는 조건문의 예시 코드다.
let isAdmin: boolean = true;
if (isAdmin) {
console.log('관리자이다.');
} else {
console.log('관리자가 아닙니다.');
}
위 코드에서, isAdmin 변수는 true 값을 가지고 있으므로, if문에서 검사할 때 조건식이 true가 된다. 따라서, 콘솔에는 '관리자이다.' 라는 문자열이 출력된다.
Null & Undefined
Null과 Undefined은 TypeScript에서 특별한 값을 나타내는 자료형이다.
둘 다 값이 할당되지 않은 변수를 표현하거나, 특정 상황에서 변수의 값이 없음을 나타낼 때 사용된다.
아래는 TypeScript에서 Null과 Undefined을 사용한 예시 코드다.
let a: number | null; // a 변수는 number 또는 null 값을 가질 수 있다.
let b: number | undefined; // b 변수는 number 또는 undefined 값을 가질 수 있다.
console.log(a); // null이 출력된다.
console.log(b); // undefined가 출력된다.
위 코드에서 a 변수는 number 또는 null 값을 가질 수 있다. 이 변수에는 아직 값을 할당하지 않았으므로, 기본적으로 null 값이 할당된다. b 변수도 number 또는 undefined 값을 가질 수 있다. 이 변수도 값이 할당되지 않았으므로, undefined 값이 할당된다.
Null과 Undefined은 주로 선택적 매개변수와 반환값을 처리할 때 사용된다. 예를 들어, 다음과 같은 함수가 있다고 가정해보자.
function findIndex(arr: any[], value: any): number {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === value) {
return i;
}
}
return null;
}
위 함수는 배열에서 주어진 값을 검색하여 인덱스를 반환한다. 하지만 만약 배열에서 주어진 값을 찾을 수 없다면, null 값을 반환한다.
Undefined 값은 주로 함수의 매개변수나 반환값이 선택적인 경우 사용된다. 예를 들어, 다음과 같은 함수가 있다고 가정해보자.
function printName(firstName: string, lastName?: string): void {
if (lastName) {
console.log(`이름: ${firstName} ${lastName}`);
} else {
console.log(`이름: ${firstName}`);
}
}
printName("John", "Doe"); // "이름: John Doe"가 출력된다.
printName("Jane"); // "이름: Jane"이 출력된다.
위 함수는 firstName 매개변수는 필수이고 lastName 매개변수는 선택적이다. lastName이 제공되지 않은 경우, 함수는 firstName만 출력한다. lastName이 제공된 경우, firstName과 lastName을 연결하여 출력한다.
Null과 Undefined은 TypeScript에서 값이 할당되지 않은 상태를 나타내는데, 이는 프로그래밍에서 예상치 못한 오류를 방지하기 위한 중요한 개념이다.
하지만 이 값들이 모든 상황에서 사용되지는 않으므로, 사용할 때 주의해야 한다.
Symbol
Symbol은 ES6에서 추가된 새로운 원시 자료형이다.
TypeScript에서도 Symbol 자료형을 지원하며, 고유하고 변경 불가능한 값을 나타낸다.
아래는 TypeScript에서 Symbol을 사용한 예시 코드다.
const symbol1 = Symbol();
const symbol2 = Symbol("description");
console.log(symbol1 === symbol2); // false가 출력된다.
const obj = {
[symbol1]: "value1",
[symbol2]: "value2"
};
console.log(obj[symbol1]); // "value1"이 출력된다.
console.log(obj[symbol2]); // "value2"가 출력된다.
위 코드에서 symbol1과 symbol2 변수는 각각 새로운 Symbol을 생성한다. symbol2 변수는 Symbol 생성자의 매개변수로 문자열을 지정하여 Symbol에 설명을 추가한다.
Symbol은 객체 속성 이름으로 사용될 수 있다. 위 코드에서는 obj 객체의 속성 이름으로 symbol1과 symbol2를 사용한다. 이러한 Symbol 속성은 다른 속성 이름과 충돌하지 않으므로 객체의 고유한 식별자로 사용될 수 있다.
Symbol은 고유한 값을 나타내므로, symbol1과 symbol2가 같은지 비교하면 false가 출력된다. 이는 Symbol 값이 서로 다르기 때문이다.
Symbol은 JavaScript의 고유한 기능 중 하나이며, 일반적으로 객체의 속성 이름으로 사용된다. TypeScript에서도 Symbol을 사용하여 객체를 더욱 유연하고 안전하게 다룰 수 있다.
Bigint
TypeScript에서 bigint 타입은 자바스크립트의 number 타입으로 표현할 수 없는 매우 큰 정수를 나타내는 데 사용된다.
bigint는 number와 유사하지만, number가 표현할 수 있는 범위를 초과하는 매우 큰 정수를 다룰 수 있다.
bigint 타입은 다음과 같은 방법으로 생성할 수 있다.
let bigIntValue: bigint = 100n; // "n" 접미사를 사용하여 bigint 타입으로 지정한다.
위의 예제에서 bigIntValue 변수는 bigint 타입으로 지정되었으며, 값은 100n으로 지정된다. n 접미사는 TypeScript에서 bigint 리터럴을 나타내며, 해당 리터럴 뒤에는 0 또는 양의 정수가 따라온다.
bigint 타입은 number와 유사하게 산술 연산을 수행할 수 있다. 다만, number와 다르게 bigint는 일반적인 산술 연산자(+, -, *, /, %)를 사용할 수 없다. 대신, bigint에 대한 산술 연산은 다음과 같은 방법으로 수행된다.
let a = 10n;
let b = 5n;
let addResult = a + b; // 15n
let subResult = a - b; // 5n
let mulResult = a * b; // 50n
let divResult = a / b; // 2n
let modResult = a % b; // 0n
위의 예제에서는 bigint 변수 a와 b를 사용하여 다양한 산술 연산을 수행한다. +, -, *, /, % 연산자는 모두 bigint에 대해 사용된다. bigint 타입은 number와 달리 정수 연산에 최적화되어 있으며, 매우 큰 정수 값을 다룰 때 유용하다.
bigint 타입은 ES2020에서 추가되었으며, TypeScript 3.2부터 지원된다.