TypeScript - Types: A Beginner's Guide
안녕하세요, 미래의 코딩 슈퍼스타 여러분! 오늘 우리는 TypeScript의 타입에 관해 흥미로운 세상으로 뛰어들어 보겠습니다. 코드를 한 줄도 작성해 본 적이 없으신 분들도 걱정 마세요 - 이 흥미로운 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼이 끝나면 여러분이 얼마나 많이 배웠는지 놀라게 될 것입니다. 그럼 시작해 보겠습니다!
TypeScript에서 타입이란?
深淵으로 뛰어들기 전에, 타입이 무엇이고 왜 중요한지에 대해 이야기해 보겠습니다. 타입은 우리의 데이터에 붙이는 레이블이라고 생각해 보세요. 우리가 옷장을 셔츠, 바지, 신발 등으로 나누어 정리하는 것처럼, 타입은 우리의 코드를 정리하고 우리가 메타포리카하게 양말을 셔츠 통에 넣지 않도록 방지하는 역할을 합니다.
TypeScript는 선택적 정적 타입을 추가한 JavaScript의 확장집합입니다. 이는 우리가 TypeScript에 데이터의 유형을 정확히 알려줄 수 있어서, 코드가 실행되기 전에 오류를 잡을 수 있다는 뜻입니다. 이는 친절한 친구가 어깨에 기대어 우리가 실수를 하기 전에 잠재적인 실수를 지적해 주는 것과 같습니다.
The Any Type: TypeScript의 와일드 카드
TypeScript에서 가장 유연한 타입으로 시작해 보겠습니다: any
. 이는 덱의 조커와 같아서, 무엇이든 될 수 있습니다!
let myVariable: any = 42;
myVariable = "Hello, World!";
myVariable = true;
이 예제에서 myVariable
은 숫자, 문자열, 브루션 중 하나가 될 수 있습니다. 매우 유연하지만, 강력한 권력은 큰 책임을 동반합니다. any
를 너무 자주 사용하면 TypeScript를 사용하는 목적을 무의미하게 만들 수 있으므로, 신중하게 사용하세요!
내장 타입: TypeScript의 기본 블록
TypeScript는 대부분의 우리 필요를 충족시키는 여러 가지 내장 타입을 제공합니다. 이제 하나씩 탐구해 보겠습니다:
1. Number
let age: number = 30;
let price: number = 9.99;
TypeScript의 숫자는 정수 또는 부동소수점 값을 가질 수 있습니다. 다른 언어에서와 같이 다양한 숫자 타입에 대해 염려할 필요가 없습니다!
2. String
let name: string = "Alice";
let greeting: string = `Hello, ${name}!`;
문자열은 단일引号, 이중引号, 백틱으로 정의할 수 있습니다. 백틱은 ${}
를 사용하여 표현식을 내장할 수 있습니다.
3. Boolean
let isStudent: boolean = true;
let hasPassedExam: boolean = false;
브루션은 참 또는 거짓일 수 있습니다. 코드에 대한 예스/노问道로 생각해 보세요.
4. Array
let numbers: number[] = [1, 2, 3, 4, 5];
let fruits: Array<string> = ["apple", "banana", "orange"];
배열은 동일한 타입의 여러 값을 가질 수 있습니다. 정사각括弧 또는 Array<T>
문법을 사용하여 정의할 수 있습니다.
5. Tuple
let person: [string, number] = ["Alice", 30];
튜플은 고정된 수의 요소를 가진 배열로, 각 요소는 다른 타입을 가질 수 있습니다. 이는 각 아이템에 대해 특정 컴파트먼트가 있는 작은, 정리된 상자와 같습니다.
6. Enum
enum Color {
Red,
Green,
Blue
}
let favoriteColor: Color = Color.Blue;
열거형은 이름이 지정된 상수 집합을 정의할 수 있습니다. 고정된 옵션을 나타내는 데 매우 유용합니다.
7. Void
function logMessage(message: string): void {
console.log(message);
}
void
은 함수가 아무것도 반환하지 않음을 나타냅니다. 편지를 보내고 답장을 기대하지 않는 것과 같습니다.
8. Null과 Undefined
let notDefined: undefined = undefined;
let empty: null = null;
이 타입은 값이 없음을 나타냅니다. 이는 하나는 의도적으로 비어 있고 (null), 다른 하나는 아직 채워지지 않았음을 나타냅니다 (undefined).
다음은 우리가 다루었던 내장 타입을 요약한 표입니다:
타입 | 설명 | 예시 |
---|---|---|
number | 숫자 값 (정수 또는 부동소수점) | let age: number = 30; |
string | 텍스트 데이터 | let name: string = "Alice"; |
boolean | 참 또는 거짓 값 | let isStudent: boolean = true; |
array | 동일한 타입의 값의 모음 | let numbers: number[] = [1, 2, 3]; |
tuple | 고정된 길이의 배열, 각 요소는 특정 타입 | let person: [string, number] = ["Alice", 30]; |
enum | 이름이 지정된 상수 집합 | enum Color { Red, Green, Blue } |
void | 함수의 반환값이 없음 | function logMessage(message: string): void { ... } |
null | 어떤 객체 값도 아닌 의도적인 값 | let empty: null = null; |
undefined | 값이 할당되지 않은 변수 | let notDefined: undefined = undefined; |
사용자 정의 타입: 자신만의 도구 제작
이제 내장 타입을 다루었으므로, 자신만의 커스텀 타입을 만드는 방법에 대해 이야기해 보겠습니다. 이는 TypeScript가 진짜 빛나는 부분입니다!
1. Interfaces
인터페이스는 객체의 구조를 정의할 수 있습니다. 이는 객체의 블루프린트라고 생각할 수 있습니다.
interface Person {
name: string;
age: number;
greet(): void;
}
let alice: Person = {
name: "Alice",
age: 30,
greet() {
console.log(`Hello, my name is ${this.name}`);
}
};
이 예제에서 우리는 Person
인터페이스를 정의하고, 이 구조를 따르는 객체를 만들었습니다. 이는 사람들이 동일한 정보를 제공해야 하는 양식을 작성하는 것과 같습니다.
2. Classes
클래스는 재사용 가능한 컴포넌트를 만드는 방법입니다. 이는 쿠키를 자를 도구와 같아서, 한 번 정의하고 여러 개의 쿠키(객체)를 만들 수 있습니다!
class Student {
name: string;
grade: number;
constructor(name: string, grade: number) {
this.name = name;
this.grade = grade;
}
study() {
console.log(`${this.name} is studying hard!`);
}
}
let bob = new Student("Bob", 10);
bob.study(); // 출력: "Bob is studying hard!"
여기서 우리는 Student
클래스를 만들었고, 속성 (name
과 grade
)와 메서드 (study
)를 정의했습니다. 이 클래스를 사용하여 여러 학생을 만들 수 있습니다.
3. Type Aliases
타입 별칭은 타입에 새로운 이름을 지정할 수 있습니다. 이는 복잡한 타입을 만들거나 기존 타입에 더 의미 있는 이름을 주는 데 유용합니다.
type Point = {
x: number;
y: number;
};
let center: Point = { x: 0, y: 0 };
이 예제에서 우리는 2D 공간의 점을 나타내는 Point
타입을 만들었습니다. 관련 속성을 그룹화하는 간단한 방법입니다.
4. Union Types
유니온 타입은 값이 여러 타입 중 하나일 수 있음을 나타냅니다. 이는 "이것이든 그것이든"이라고 말하는 것과 같습니다.
type Result = number | string;
function getResult(value: boolean): Result {
return value ? "Success" : 404;
}
여기서 Result
은 숫자이거나 문자열이 될 수 있습니다. 특정 조건에 따라 값이 다른 타입일 수 있는 경우 이는 유용합니다.
5. Intersection Types
교차 타입은 여러 타입을 하나로 결합합니다. 이는 "이것이고 그것이기도"라고 말하는 것과 같습니다.
interface Colorful {
color: string;
}
interface Circle {
radius: number;
}
type ColorfulCircle = Colorful & Circle;
let myCircle: ColorfulCircle = {
color: "red",
radius: 5
};
이 예제에서 ColorfulCircle
은 Colorful
이고 Circle
입니다. 그것은 color
과 radius
를 모두 가지고 있어야 합니다.
그리고 이렇게 되었습니다! 우리는 TypeScript 타입의 기본을 다루었고, 유연한 any
타입에서 내장 타입과 사용자 정의 타입에 이르기까지 다루었습니다. 타입은 TypeScript의 코딩 슈퍼파워처럼, 깨끗하고 신뢰할 수 있는 코드를 작성하는 데 도움을 주고, 오류를 문제가 되기 전에 잡을 수 있게 합니다.
TypeScript 여정을 계속하면서 이러한 타입들을 다양한 방법으로 결합해 보고, 실수를 두려워하지 마세요 - 그것이 우리가 배우는 방법입니다! 곧 여러분은 프로처럼 타이핑을 하고, 강력하고 오류가 없는 코드를 만들 수 있을 것입니다.
행복하게 코딩하시고, 여러분의 타입이 항상 강력하길 바랍니다!
Credits: Image by storyset