[๊ณต๋ถ ๋ชฉํ]

์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ธ ๋ชจ์ต์ ๊ฐ์ถ๊ธฐ ์ํด์ ๋ณดํต ์ด๋ฌํ ๋ด์ฉ์ด ํ์ํจ
๊ณต์ ๋ฌธ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๊ณ ์์
allow you to create custom request handlers for a given route using the Webย Requestย andย Responseย APIs.
์ฌ๊ธฐ์ ๋งํ๋ Web ์์ฒญ ๋ฐ ์๋ต API๋ฅผ ๋ค๋ฃจ๋ ๊ฒ. HTTP๋ฅผ ๋ฐฐ์ฐ๋ฉฐ ์ฐ๋ฆฐ ์น ํ๊ฒฝ์์ ์์ฒญ๊ณผ ์๋ต์ ์๋ก ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๊ณ ๊ทธ๊ฒ์ ๋์ฒด๋ก REST API๋ก ์ค๋ช ์ด ๋จ
์ ๋๊ฐ ๋ ๊ฒ์ด๊ณ , Router Handlers์์ ์ด ๋ถ๋ถ์ ๋ง๋ฌ

app directory ๋ด๋ถ์ route.ts ํ์ผ์ ๋ง๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Next.js๋ router handlers ๋ก ์ธ์ํจ
5 - '3' ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์๋๋ ์ซ์ - ์ซ์๋ง ๊ฐ๋ฅํ์ง๋ง JS๊ฐ ์์์ ๋ฌธ์์ด 3์ ์ซ์๋ก ๋ฐ๊ฟ์ค. ์ฆ, ์ฝ๋๋ฅผ ๊ธธ๊ฒ ์งค ๋ ์์ ๋ & ์ ์ฐ์ฑ์ ์คํ๋ ค ์ ์ข์์ง (ํ๋ก์ ํธ ์ปค์ง ์๋ก ๋จ์ ๋ฟ์)TypeScript๋ ํ์
์ ์๊ฒฉํ ๊ฒ์ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋ฐ๋ก์ก๊ธฐ ์ฝ๊ณ , ๋ํ ์คํ๋ ์ก์์ค
์ฝ๋ ์๋ํฐ ๋ถ๊ฐ๊ธฐ๋ฅ ์ญํ ๋ก ๋ด๋ ๋ฌด๋ฐฉํจ
์ด๋ก ์ธํด ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๊ณ ์์ฐ์ฑ์ด ํฅ์๋จ
let hello: string = "hi"!;let num: number = 123;let arr: number[] = [1,2,3];
let arr1: Array<number> = [1,2,3];
let arr2: Array<string> = ["hi", "hihi"];
let arr4: [string, number] = ["hi", 24];
let hwi: object = { name: "hwi", age: 24 };
let person: { name: string; age: number } = {
name: "hwi",
age: 24
};
- ๋ถ๋ฆฌ์ธ : `let trueFalse: boolean = true;`
let a: [string, number]; // ํํ ํ์
์ผ๋ก ์ ์ธ
a = ["hi", 5]; // ์ฑ๊ณต
a = [5, "h1"]; // ์ค๋ฅ (์์๊ฐ ์ ๋ง์)
a = ["h1", 5, 521]; // ์ค๋ฅ (๊ฐ์๊ฐ ์ ๋ง์)
TypeScript ํจ์๋ JavaScript์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ช ํจ์(named function)๊ณผ ์ต๋ช ํจ์(anonymous function)์ผ๋ก ๋ง๋ค ์ ์์.
์ด๋ฅผ ํตํด API์์ ํจ์ ๋ชฉ๋ก์ ์์ฑํ๋์ง ์ผํ์ฑ ํจ์๋ฅผ ์จ์ ๋ค๋ฅธ ํจ์๋ก ์ ๋ฌํ๋์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์์
(3)-1. ํจ์ ํ์ ์ ์ธ
TypeScript์์ ํ๋ผ๋ฏธํฐ์ return ๊ฐ์ ํ์ ์ ์ธ ๊ฐ๋ฅ
function add(a: number, b: number): number {
return a + b;
}
(3)-2. ์ ํ์ ๋งค๊ฐ๋ณ์ (optional parameter)
optional parametter๋ ?๋ฅผ ์์ ๋ถ์ฌ์ฃผ๋ฉด ๋จ
function addName(firstName: string, lastName?: string) {
if (lastName) {
return firstName + " " + lastName;
} else {
return firstName;
}
}
TypeScript๋ ํ์ ๊ฒ์ฌ๊ฐ ๊ฐ์ ํํ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค๋ ๊ฒ์ด ํต์ฌ ์์น ์ค ํ๋์. ์ด๋ฅผ "๋ํ์ดํ(duck typing)" ํน์ "๊ตฌ์กฐ์ ์๋ธํ์ดํ(structural subtyping)"์ด๋ผ๊ณ ๋ ํจ.
TypeScript์์ ์ธํฐํ์ด์ค๋ ์ด๋ฐ ํ์ ๋ค์ ์ด๋ฆ์ ์ง๋ ์ญํ ์ ํ๊ณ , ์ฝ๋ ์์ ๊ณ์ฝ์ ์ ์ํ๋ ๋ฟ๋ง ์๋๋ผ ํ๋ก์ ํธ ์ธ๋ถ์์ ์ฌ์ฉํ๋ ์ฝ๋์ ๊ณ์ฝ์ ์ ์ํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์.
์ฆ, ์์ฃผ ์ฌ์ฉํ๋ ํ์
๋ค์ obj ํํ์ ๋ฌถ์์ผ๋ก ์ ์ํด ์๋ก์ด ํ์
์ผ๋ก ๋ง๋๋ ๊ฒ
(4)-1. interface ์ ์ธ
interface User {
name: string;
age: number;
}
(4)-2. ๋ณ์ ํ์ฉ
const hwi: User = {name: "hwijin", age: 24}
(4)-3. ํจ์ ์ธ์๋ก ํ์ฉ
function getUser(user: User) {
console.log(user);
}
getUser({name: "hwijin", age: 24});
(4)-4. ํจ์ ๊ตฌ์กฐ ํ์ฉ
interface Add {
(a: number, b: number): number;
}
let handleAdd: Add = (a, b) => a + b;
console.log(handleAdd(2,7));
(4)-5. ๋ฐฐ์ด ํ์ฉ
interface NumberArray {
[index: number]: number;
}
let arr: NumberArray = [2, 5, 7];
(4)-6. interface ํ์ฅ
interface Person {
name: string;
age: number;
}
interface Job extends Person {
job: string;
}
const hwijin: Job = {
name: "hwijin",
age: 24,
job: "Developer"
};
ํ์ ํค์๋๋ interface์ ๋ค๋ฅด๊ฒ ์๋ก์ด ํ์ ์ ์์ฑํ๋ ๊ฒ์ด ์๋ ๋ณ์นญ ๋ถ์ฌ๋ฅผ ํ๋ ๊ฒ
(5)-1. ํ์ ๋ณ์นญ ์ ์ธ
type StringOrBoolean = string | boolean;
const a: StringOrBoolean = "hihi~";
const b: StringOrBoolean = false;
(5)-2. type๊ณผ interface ์ฐจ์ด
ํ์
๋ณ์นญ๊ณผ ์ธํฐํ์ด์ค์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ โก๏ธ ํ์
์ ํ์ฅ ๊ฐ๋ฅ / ๋ถ๊ฐ๋ฅ ์ฌ๋ถ
์ธํฐํ์ด์ค๋ ํ์ฅ์ด ๊ฐ๋ฅ, ํ์
๋ณ์นญ์ ๋ถ๊ฐ๋ฅ. ๋ฐ๋ผ์ interface๊ฐ ์ฌ์ฉํ๊ธฐ์ ๋ ํธ๋ฆฌํจ
(6)-1. ์ ๋์จ ํ์ (Union Type)
ํ ๊ฐ ์ด์์ type์ ์ ์ธํ ๋ ์ฌ์ฉํ ์ ์์
| ํค์๋ ์ฌ์ฉ
function strOrNum (value: string | number) {
if(typeof value === "string") {
return 1
} else if (typeof value === "number") {
return 2
} else {
throw new TypeError("๋ฌธ์์ด ๋๋ ์ซ์๋ง ๊ฐ๋ฅ");
}
}
(6)-2. ๊ต์ฐจ ํ์ (Intersection Type)
ํฉ์งํฉ๊ณผ ๊ฐ์ ๊ฐ๋
ํจ์ ํธ์ถ์ ๊ฒฝ์ฐ, ํจ์ ์ธ์์ ๋ช
์ํ type๋ฅผ ๋ชจ๋ ์ ๊ณตํด์ผ ํจ
& ํค์๋
interface Person {
name: string;
age: number;
}
interface Job {
job: string
skill: string;
}
type human = Person & Job;
let aHuman: human = {
name: "hwijin",
age: 24,
job: "Developer",
skill: "React, TypeScript, NextJS"
};
(6)-1. ์ ๊ทผ ์ ํ์
ํด๋์ค ๊ธฐ๋ฐ ๊ฐ์ฒด ์งํฅ ์ธ์ด๊ฐ ์ง์ํ๋ ์ ๊ทผ ์ ํ์ public, private, protected๋ฅผ ์ง์ํ๋ฉฐ ์๋ฏธ ๋ํ ๋์ผ
(6)-2. Class์์์ ํ์ ์ ์ธ
class Person {
private name: string;
public age: number;
readonly job: string;
constructor(name: string, age: number, job: string) {
this.name = name;
this.age = age;
this.job = job;
}
}
์ด๋ฆ์ด ์๋ ์์๋ค์ ์งํฉ์ ์ ์ํ ์ ์์. ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์๋๋ฅผ ๋ฌธ์ํ ํ๊ฑฐ๋ ๊ตฌ๋ถ๋๋ ์ฌ๋ก ์งํฉ์ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์. TypeScript๋ ์ซ์์ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ด๊ฑฐํ์ ์ ๊ณต
(8)-1. ์ซ์ํ Enum
enum Food {
Chicken, // 0
rice, // 1
Pizza // 2
}
const likeFood = Food.Pizza; // 2
(8)-2. ๋ฌธ์์ Enum
enum Human {
kim = "๊น",
park = "๋ฐ"
}
const human = Human.kim; // ๊น
C#๊ณผ Java ๊ฐ์ ์ธ์ด์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋๊ตฌ์์์ ์ฃผ์ ๋๊ตฌ ์ค ํ๋๋ ์ ๋ค๋ฆญ์. ์ฆ, ๋จ์ผ ํ์ ์ด ์๋ ๋ค์ํ ํ์ ์์ ์๋ํ๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ์ ์์
์ ๋ค๋ฆญ์ ํ์ฉํ๋ฉด ๊ฐ์ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ์ค๋ณตํด์ ๋ง๋ค ํ์๊ฐ ์๊ณ ํ์ ์ถ๋ก ์์ ๊ฐ์ ์ ๊ฐ์ง๋ค๋ ์ฅ์ ์ด ์์
(8)-1. ์ ๋ค๋ฆญ ์ ์ธ
<T>์ฒ๋ผ ํ์
์ ์ ์ธํจ
function numberLog<T>(number: T): T {
console.log(number);
return number;
}
numberLog<number>(1234124)=
(8)-2. interface์ ์ ๋ค๋ฆญ ์ ์ธ
interface Coffee<T> {
price: number;
caffeine: <T>
}
const americano: Coffee<>