TypeScriptμ 보μ μν€ν μ²λ₯Ό νμνκ³ , νμ μμ€ν μ΄ μ ν리μΌμ΄μ 보μμ κ°ννκ³ , μ·¨μ½μ μ μ€μ΄λ©°, κ°λ ₯ν μ½λ 보νΈλ₯Ό μ΄μ§νλ λ°©λ²μ μ΄μ μ λ§μΆ₯λλ€.
TypeScript 보μ μν€ν μ²: κ°λ ₯ν 보νΈλ₯Ό μν νμ μμ μ± νμ©
μ€λλ μ 볡μ‘ν μννΈμ¨μ΄ νκ²½μμ 보μμ 무μλ³΄λ€ μ€μν©λλ€. μ΅μ μ ν리μΌμ΄μ μ λμμλ μνμ μ§λ©΄νκ³ μμΌλ©°, κ²¬κ³ νκ³ νλ ₯μ μΈ μμ€ν μ ꡬμΆνλ κ²μ΄ μ€μν©λλ€. λ¨μΌ λꡬλ§μΌλ‘ μλ²½ν 보μμ 보μ₯ν μλ μμ§λ§, TypeScriptμ κ°μ κ°λ ₯ν νμ μμ€ν μ κ°μΆ μΈμ΄λ μλΉν μ΄μ μ μ 곡ν©λλ€. μ΄ κΈμ TypeScriptμ 보μ μν€ν μ²μ νμ μμ μ± λ©μ»€λμ¦μ΄ λ μμ ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ΄λ»κ² κΈ°μ¬νλμ§ μμΈν μ€λͺ ν©λλ€.
보μ νκ²½ μ΄ν΄
TypeScriptμ μΈλΆ μ¬νμ μμΈν μμ보기 μ μ, μΉ μ ν리μΌμ΄μ μ κ΄΄λ‘νλ μΌλ°μ μΈ λ³΄μ μ·¨μ½μ μ νμ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS): λ€λ₯Έ μ¬μ©μκ° λ³΄λ μΉμ¬μ΄νΈμ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ½μ νλ κ²μ λλ€.
- SQL μΈμ μ : λ°μ΄ν°λ² μ΄μ€ 쿼리μ μ·¨μ½μ μ μ΄μ©νμ¬ λ¬΄λ¨ μ‘μΈμ€λ₯Ό μ»κ±°λ λ°μ΄ν°λ₯Ό μ‘°μνλ κ²μ λλ€.
- κ΅μ°¨ μ¬μ΄νΈ μμ² μμ‘° (CSRF): μ¬μ©μκ° μλνμ§ μμ μμ μ μννλλ‘ μμ΄λ κ²μ λλ€.
- μλΉμ€ κ±°λΆ (DoS) 곡격: μμ€ν μ νΈλν½μ κ³ΌλΆνμμΌ ν©λ²μ μΈ μ¬μ©μκ° μ¬μ©ν μ μκ² λ§λλ κ²μ λλ€.
- μΈμ¦ λ° κΆν λΆμ¬ κ²°ν¨: μ¬μ©μ μΈμ¦ λλ μ κ·Ό μ μ΄ λ©μ»€λμ¦μ μ½μ μ λλ€.
- λ²νΌ μ€λ²νλ‘μ°: ν λΉλ λ©λͺ¨λ¦¬ λ²νΌλ₯Ό λμ΄ λ°μ΄ν°λ₯Ό μ°λ κ²μΌλ‘, μ μ¬μ μΌλ‘ μΆ©λ λλ μ½λ μ€νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. JavaScript κΈ°λ° νκ²½μμλ μ§μ μ μΌλ‘ λ ννμ§λ§, κΈ°λ³Έ λ€μ΄ν°λΈ λͺ¨λ λλ μ’ μμ±μμ λ°μν μ μμ΅λλ€.
- νμ νΌλ μ€λ₯: μμλλ λ°μ΄ν° νμ κ³Ό μ€μ λ°μ΄ν° νμ κ°μ λΆμΌμΉλ‘, μκΈ°μΉ μμ λμ λλ μ·¨μ½μ μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
μ΄λ¬ν μ·¨μ½μ μ€ μλΉμλ μ격ν νμ κ²μ¬ λ° μ ν¨μ± κ²μ¬ λΆμ‘±μΌλ‘ μΈν΄ μ½λ μ€λ₯μμ λ°μν©λλ€. λ°λ‘ μ΄ μ§μ μμ TypeScriptμ νμ μμ€ν μ΄ λΉμ λ°ν©λλ€.
TypeScriptμ νμ μμ€ν : 보μμ κΈ°λ°
TypeScriptλ μ μ νμ΄νμ μΆκ°νλ JavaScriptμ μμ μ§ν©μ λλ€. μ΄λ λ³μ, ν¨μ λ§€κ°λ³μ λ° λ°ν κ°μ νμ μ΄ λ°νμμ΄ μλ μ»΄νμΌ νμμ κ²μ¬λ¨μ μλ―Έν©λλ€. μ΄λ¬ν νμ κ΄λ ¨ μ€λ₯μ μ‘°κΈ° κ°μ§λ 보μμ μμ΄ μ€μν μ΄μ μ λλ€.
μ»΄νμΌ νμ μ€λ₯ κ°μ§
TypeScriptμ κ°μ₯ μ€μν 보μ μ΄μ μ μ½λκ° λ°°ν¬λκΈ° μ μ νμ κ΄λ ¨ μ€λ₯λ₯Ό μ‘μλΌ μ μλ€λ κ²μ λλ€. νμ μ λͺ μμ μΌλ‘ μ μνκ±°λ TypeScriptκ° νμ μ μΆλ‘ νλλ‘ ν¨μΌλ‘μ¨, μ»΄νμΌλ¬λ λ°νμ λ²κ·Έλ λ λμκ° λ³΄μ μ·¨μ½μ μΌλ‘ λνλ μ μλ λΆμΌμΉ λ° μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³ν μ μμ΅λλ€. μ΄λ¬ν μ¬μ μλ°©μ μ κ·Ό λ°©μμ μ ν리μΌμ΄μ μ 곡격 νλ©΄μ μ€μ λλ€.
μμ:
function sanitizeInput(input: string): string {
// Simulate a basic sanitization function (in reality, use a robust library)
return input.replace(//g, '>');
}
function displayMessage(message: string): void {
console.log(message);
}
let userInput: any = ""; // Potentially dangerous input
//Incorrect usage in plain JavaScript - would allow XSS
//displayMessage(userInput);
//Type safety catches the any type
let safeInput: string = sanitizeInput(userInput);
displayMessage(safeInput);
μ΄ μμμμ TypeScriptλ `displayMessage`κ° `string`λ§ λ°λλ‘ κ°μ ν©λλ€. λ§μ½ `userInput`μ΄ μ λλ‘ μλνμ΄μ¦λμ§ μμλ€λ©΄ (κ·Έλ¦¬κ³ μ¬μ ν `string` λμ `any`λ‘ νμ μ΄ μ§μ λμλ€λ©΄), μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό νμνμ¬ μ μ¬μ μΈ XSS μ·¨μ½μ μ΄ νλ‘λμ μ λλ¬νλ κ²μ λ°©μ§ν κ²μ λλ€. λͺ μμ μΈ νμ μ μΈμ κ°λ°μκ° μ λ ₯μ μμ νκ² μ²λ¦¬νλλ‘ μλ΄ν©λλ€.
λ°νμ μ€λ₯ κ°μ
λ°νμ μ€λ₯λ 보μ λ¬Έμ μ μ€μν μμΈμ΄ λ μ μμ΅λλ€. μκΈ°μΉ μμ μΆ©λ λλ μμΈλ λ―Όκ°ν μ 보λ₯Ό λ ΈμΆνκ±°λ 곡격μκ° μ·¨μ½μ μ μ μ©ν κΈ°νλ₯Ό λ§λ€ μ μμ΅λλ€. TypeScriptμ νμ μμ€ν μ μ ν리μΌμ΄μ μ 체μμ λ°μ΄ν° νμ μ΄ μΌκ΄λλλ‘ λ³΄μ₯νμ¬ μ΄λ¬ν λ°νμ μ€λ₯λ₯Ό μ΅μννλ λ° λμμ΄ λ©λλ€.
μμ:
interface User {
id: number;
name: string;
email: string;
}
function getUser(id: number): User | undefined {
// Simulate fetching a user from a database
const users: User[] = [
{ id: 1, name: "Alice", email: "alice@example.com" },
{ id: 2, name: "Bob", email: "bob@example.com" }
];
return users.find(user => user.id === id);
}
function displayUserName(user: User) {
console.log(`User Name: ${user.name}`);
}
const user = getUser(3); // User with ID 3 doesn't exist
// This would cause a runtime error in JavaScript
// displayUserName(user);
if (user) {
displayUserName(user);
} else {
console.log("User not found.");
}
μ΄ κ²½μ°, μ§μ λ IDλ₯Ό κ°μ§ μ¬μ©μκ° λ°κ²¬λμ§ μμΌλ©΄ `getUser`λ `undefined`λ₯Ό λ°νν μ μμ΅λλ€. TypeScriptκ° μλ€λ©΄ `displayUserName(user)`λ₯Ό μ§μ νΈμΆνλ κ²μ λ°νμ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€. `User | undefined` λ°ν νμ μ κ°μ§ TypeScriptμ νμ μμ€ν μ κ°λ°μκ° μ¬μ©μλ₯Ό μ°Ύμ μ μλ κ²½μ°λ₯Ό μ²λ¦¬νλλ‘ κ°μ νμ¬ μ μ¬μ μΈ μΆ©λ λλ μκΈ°μΉ μμ λμμ λ°©μ§ν©λλ€. μ΄λ νΉν μ¬μ©μ λ°μ΄ν°μ κ΄λ ¨λ λ―Όκ°ν μμ μ μ²λ¦¬ν λ μ€μν©λλ€.
κ°νλ μ½λ μ μ§λ³΄μμ± λ° κ°λ μ±
μμ ν μ½λλ μ’ μ’ μ μ μ§ κ΄λ¦¬λκ³ μ½κ² μ΄ν΄λ©λλ€. TypeScriptμ νμ μμ€ν μ μμλλ λ°μ΄ν° νμ μ λν λͺ νν λ¬Έμλ₯Ό μ 곡ν¨μΌλ‘μ¨ μ½λ μ μ§λ³΄μμ± λ° κ°λ μ±μ κΈ°μ¬ν©λλ€. μ΄λ κ°λ°μκ° μ½λλ₯Ό μ΄ν΄νκ³ , μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ©°, μλ‘μ΄ μ·¨μ½μ μ λμ νμ§ μκ³ λ³κ²½ μμ μ μννλ κ²μ λ μ½κ² λ§λλλ€.
μ νμ μ΄ μ§μ λ μ½λλ λ¬Έμμ ν ννλ‘ μλνμ¬ κ°λ° λ° μ μ§λ³΄μ μ€μ μ€ν΄μ μ€λ₯κ° λ°μν κ°λ₯μ±μ μ€μ λλ€. μ΄λ νΉν μ¬λ¬ κ°λ°μκ° μ°Έμ¬νλ ν¬κ³ 볡μ‘ν νλ‘μ νΈμμ μ€μν©λλ€.
TypeScript κΈ°λ₯μ νΉμ 보μ μ΄μ
TypeScriptλ 보μμ μ§μ μ μΌλ‘ κ°ννλ λͺ κ°μ§ νΉμ κΈ°λ₯μ μ 곡ν©λλ€:
μ격ν Null κ²μ¬
JavaScriptμμ κ°μ₯ νν μ€λ₯ μμΈ μ€ νλλ `null` λλ `undefined` κ°μ μ°λ°μ μΈ μ¬μ©μ λλ€. TypeScriptμ μ격ν null κ²μ¬λ κ°λ°μκ° `null` λλ `undefined` κ°μ κ°λ₯μ±μ λͺ μμ μΌλ‘ μ²λ¦¬νλλ‘ μꡬν¨μΌλ‘μ¨ μ΄λ¬ν μ€λ₯λ₯Ό λ°©μ§νλ λ° λμμ΄ λ©λλ€. μ΄λ μ μ¬μ μΌλ‘ null κ°μ λν μμ μΌλ‘ μΈν΄ λ°μνλ μκΈ°μΉ μμ μΆ©λ λλ 보μ μ·¨μ½μ μ λ°©μ§ν©λλ€.
function processData(data: string | null): void {
// Without strict null checks, this could throw an error if data is null
// console.log(data.toUpperCase());
if (data !== null) {
console.log(data.toUpperCase());
} else {
console.log("Data is null.");
}
}
processData("example data");
processData(null);
`data`μ μμ±μ μ κ·ΌνκΈ° μ μ `null` κ²μ¬λ₯Ό κ°μ ν¨μΌλ‘μ¨ TypeScriptλ μ μ¬μ μΈ λ°νμ μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
μ½κΈ° μ μ© μμ±
TypeScriptμ `readonly` νμ μλ κ°λ°μκ° μ΄κΈ°ν ν μμ ν μ μλ μμ±μ μ μν μ μλλ‘ ν©λλ€. μ΄λ λ―Όκ°ν λ°μ΄ν°μ λν μ°λ°μ λλ μ μμ μΈ μμ μ λ°©μ§νλ λ° μ μ©ν©λλ€. λ³κ²½ λΆκ°λ₯ν λ°μ΄ν°λ μλνμ§ μμ λ³κ²½μ μνμ μ€μ¬ λ³Έμ§μ μΌλ‘ λ μμ ν©λλ€.
interface Configuration {
readonly apiKey: string;
apiUrl: string;
}
const config: Configuration = {
apiKey: "YOUR_API_KEY",
apiUrl: "https://api.example.com"
};
// This will cause a compile-time error
// config.apiKey = "NEW_API_KEY";
config.apiUrl = "https://newapi.example.com"; //This is allowed, as it is not readonly
console.log(config.apiKey);
`apiKey`λ μ°λ°μ μΈ μμ μΌλ‘λΆν° 보νΈλμ΄ κ΅¬μ±μ 보μμ κ°νν©λλ€.
νμ κ°λ λ° κ΅¬λ³λ μ λμ¨
νμ κ°λμ ꡬλ³λ μ λμ¨μ κ°λ°μκ° λ°νμ κ²μ¬λ₯Ό κΈ°λ°μΌλ‘ λ³μμ νμ μ μ’ν μ μλλ‘ ν©λλ€. μ΄λ λ€μν λ°μ΄ν° νμ μ μ²λ¦¬νκ³ μ¬λ°λ₯Έ νμ μ λν΄ μμ μ΄ μνλλλ‘ λ³΄μ₯νλ λ° μ μ©ν©λλ€. μ΄λ νμ νΌλ μ·¨μ½μ μ λ°©μ§νλ λ° κ°λ ₯ν©λλ€.
interface SuccessResult {
status: "success";
data: any;
}
interface ErrorResult {
status: "error";
message: string;
}
type Result = SuccessResult | ErrorResult;
function processResult(result: Result): void {
if (result.status === "success") {
// TypeScript knows that result is a SuccessResult here
console.log("Data: ", result.data);
} else {
// TypeScript knows that result is an ErrorResult here
console.error("Error: ", result.message);
}
}
const success: SuccessResult = { status: "success", data: { value: 123 } };
const error: ErrorResult = { status: "error", message: "Something went wrong" };
processResult(success);
processResult(error);
TypeScriptλ `result.status` κ°μ λ°λΌ `result`μ νμ μ μ ννκ² μΆλ‘ νμ¬, νμ μ κΈ°λ°ν λ€λ₯Έ μ½λ κ²½λ‘λ₯Ό μ€νν μ μκ² νμ¬ μ·¨μ½μ μ λ ΈμΆν μ μλ λ Όλ¦¬ μ€λ₯λ₯Ό λ°©μ§ν©λλ€.
TypeScriptλ₯Ό μ¬μ©ν μμ ν μ½λ© κ΄ν
TypeScriptμ νμ μμ€ν μ΄ λ³΄μμ μν κ²¬κ³ ν κΈ°λ°μ μ 곡νμ§λ§, μ§μ μΌλ‘ κ²¬κ³ ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄μλ μμ ν μ½λ© κ΄νμ λ°λ₯΄λ κ²μ΄ μ€μν©λλ€. κ³ λ €ν΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- μ λ ₯ μ ν¨μ± κ²μ¬ λ° μλνμ΄μ§: XSS λ° κΈ°ν μ£Όμ 곡격μ λ°©μ§νκΈ° μν΄ νμ μ¬μ©μ μ λ ₯μ κ²μ¦νκ³ μλνμ΄μ§νμμμ€. μ΄λ¬ν λͺ©μ μ μν΄ μ€κ³λ κ²μ¦λ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμμμ€.
- μΆλ ₯ μΈμ½λ©: XSSλ₯Ό λ°©μ§νκΈ° μν΄ λΈλΌμ°μ μ λ°μ΄ν°λ₯Ό νμνκΈ° μ μ λ°μ΄ν°λ₯Ό μΈμ½λ©νμμμ€. νΉμ 컨ν μ€νΈμ μ ν©ν μΈμ½λ© ν¨μλ₯Ό μ¬μ©νμμμ€.
- μΈμ¦ λ° κΆν λΆμ¬: λ―Όκ°ν λ°μ΄ν° λ° λ¦¬μμ€λ₯Ό 보νΈνκΈ° μν΄ κ°λ ₯ν μΈμ¦ λ° κΆν λΆμ¬ λ©μ»€λμ¦μ ꡬννμμμ€. OAuth 2.0 λ° JWTμ κ°μ μ°μ νμ€ νλ‘ν μ½μ μ¬μ©νμμμ€.
- μ κΈ°μ μΈ λ³΄μ κ°μ¬: μ μ¬μ μΈ μ·¨μ½μ μ μλ³νκ³ ν΄κ²°νκΈ° μν΄ μ κΈ°μ μΈ λ³΄μ κ°μ¬λ₯Ό μννμμμ€. μλνλ λꡬμ μλ μ½λ κ²ν λ₯Ό μ¬μ©νμμμ€.
- μ’ μμ± κ΄λ¦¬: 보μ μ·¨μ½μ μ ν¨μΉνκΈ° μν΄ μ’ μμ±μ μ΅μ μνλ‘ μ μ§νμμμ€. μ·¨μ½ν μ’ μμ±μ μλ³νκΈ° μν΄ `npm audit` λλ `yarn audit`κ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμμμ€.
- μ΅μ κΆνμ μμΉ: μ¬μ©μ λ° μ ν리μΌμ΄μ μ μμ μ μννλ λ° νμν μ΅μνμ κΆνλ§ λΆμ¬νμμμ€.
- μ€λ₯ μ²λ¦¬: μ€λ₯ λ©μμ§μμ λ―Όκ°ν μ λ³΄κ° μ μΆλλ κ²μ λ°©μ§νκΈ° μν΄ μ μ ν μ€λ₯ μ²λ¦¬λ₯Ό ꡬννμμμ€. μ€λ₯λ₯Ό μμ νκ² κΈ°λ‘νκ³ μ¬μ©μμκ² λ΄λΆ μΈλΆ μ 보λ₯Ό λ ΈμΆνμ§ λ§μμμ€.
- 보μ ꡬμ±: νκ²½ λ³μ λλ μ μ© λ³΄μ κ΄λ¦¬ λꡬλ₯Ό μ¬μ©νμ¬ λ―Όκ°ν κ΅¬μ± λ°μ΄ν° (μ: API ν€, λ°μ΄ν°λ² μ΄μ€ μνΈ)λ₯Ό μμ νκ² μ μ₯νμμμ€.
- μν λͺ¨λΈλ§: κ°λ° νλ‘μΈμ€ μ΄κΈ°μ μ μ¬μ μΈ μν λ° μ·¨μ½μ μ μλ³νμμμ€. μ ν리μΌμ΄μ μ 곡격 νλ©΄μ μ΄ν΄νκΈ° μν΄ μν λͺ¨λΈμ μμ±νκ³ μ μ§ κ΄λ¦¬νμμμ€.
TypeScriptλ₯Ό 보μ μν¬νλ‘μ°μ ν΅ν©νκΈ°
TypeScriptμ 보μ μ΄μ μ κ·Ήλννλ €λ©΄, μ΄λ₯Ό κ°λ° μν¬νλ‘μ°μ ν¨κ³Όμ μΌλ‘ ν΅ν©νμμμ€:
- μ격 λͺ¨λ νμ±ν: TypeScriptμ μ격 λͺ¨λ (`--strict`)λ₯Ό νμ±ννμ¬ κ°μ₯ μ격ν νμ κ²μ¬ κ·μΉμ μ μ©νμμμ€. μ΄λ λ λ§μ μ μ¬μ μ€λ₯ λ° μ·¨μ½μ μ ν¬μ°©νλ λ° λμμ΄ λ κ²μ λλ€.
- λ¦°ν° μ¬μ©: ESLintμ κ°μ λ¦°ν°λ₯Ό κΆμ₯λλ 보μ κ·μΉκ³Ό ν¨κ» μ¬μ©νμ¬ μ½λ μ€νμΌ λ° λ³΄μ λͺ¨λ² μ¬λ‘λ₯Ό κ°μ νμμμ€.
- μ μ λΆμ λꡬ: λΉλ νλ‘μΈμ€μ μ μ λΆμ λꡬλ₯Ό ν΅ν©νμ¬ μ μ¬μ μΈ μ·¨μ½μ μ μλμΌλ‘ μλ³νμμμ€. SonarQube λλ Snykμ κ°μ λꡬλ 보μ λ¬Έμ λ₯Ό μ‘°κΈ°μ κ°μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μλνλ ν μ€νΈ: μ½λκ° μμλλ‘ μλνκ³ μλ‘μ΄ μ·¨μ½μ μ λμ νμ§ μλμ§ νμΈνκΈ° μν΄ ν¬κ΄μ μΈ λ¨μ λ° ν΅ν© ν μ€νΈλ₯Ό ꡬννμμμ€.
- μ§μμ ν΅ν©/μ§μμ λ°°ν¬ (CI/CD): TypeScript μ»΄νμΌ, λ¦°ν λ° μ μ λΆμμ CI/CD νμ΄νλΌμΈμ ν΅ν©νμ¬ λͺ¨λ μ½λ λ³κ²½ μ¬νμ λν΄ λ³΄μ λ¬Έμ λ₯Ό μλμΌλ‘ νμΈνμμμ€.
νμ μμ μ±μ νκ³
TypeScriptμ νμ μμ€ν μ΄ κ°λ ₯νκΈ΄ νμ§λ§, 보μμ λν λ§λ₯ ν΄κ²°μ± μ μλλΌλ μ μ μΈμ νλ κ²μ΄ μ€μν©λλ€. μ΄λ μ£Όλ‘ νμ κ΄λ ¨ μ€λ₯λ₯Ό λ€λ£¨λ©° λͺ¨λ μ νμ μ·¨μ½μ μ λ°©μ§ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄, λ Όλ¦¬ μ€λ₯λ μλνν° λΌμ΄λΈλ¬λ¦¬μ μν΄ λμ λ μ·¨μ½μ μ λ°©μ§ν μλ μμ΅λλ€. κ°λ°μλ μ¬μ ν 보μ λͺ¨λ² μ¬λ‘μ λν΄ κ²½κ³νκ³ μ² μ ν ν μ€νΈ λ° μ½λ κ²ν λ₯Ό μνν΄μΌ ν©λλ€.
TypeScriptκ° λ°©μ§ν μ μλ κ²:
- λ Όλ¦¬ μ€λ₯: TypeScriptλ μ¬λ°λ₯Έ λ°μ΄ν° νμ μ μ¬μ©νκ³ μλμ§ νμΈν μ μμ§λ§, νλ‘κ·Έλ¨ λ Όλ¦¬μ μ€λ₯λ μ‘μλΌ μ μμ΅λλ€.
- μλνν° μ·¨μ½μ : 보μ μ·¨μ½μ μ΄ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ μλ€λ©΄, TypeScriptκ° μ΄λ₯Ό λ§μμ€ μ μμ΅λλ€.
- λ°νμ μ·¨μ½μ : TypeScriptλ μ μ λΆμμ μ 곡ν©λλ€; νκ²½ λλ μ€ν 컨ν μ€νΈμ μμ‘΄νλ νΉμ λ°νμ μ·¨μ½μ (μ: νμ΄λ° 곡격)μ μ μ νμ΄νμ΄ λ°©μ§ν μ μλ λ²μλ₯Ό λ²μ΄λ©λλ€.
κΆκ·Ήμ μΌλ‘ 보μμ 곡λμ μ± μμ λλ€. TypeScriptλ λ μμ ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ μ©ν λꡬλ₯Ό μ 곡νμ§λ§, μμ ν μ½λ© κ΄ν, μ² μ ν ν μ€νΈ λ° μ¬μ μλ°©μ μΈ λ³΄μ μ¬κ³ λ°©μκ³Ό κ²°ν©λμ΄μΌ ν©λλ€.
κΈλ‘λ² μ¬λ‘ μ°κ΅¬ λ° μμ
λ€μμ TypeScriptμ 보μ κΈ°λ₯μ΄ λ€μν κΈλ‘λ² μ»¨ν μ€νΈμμ μ΄λ»κ² μ μ©λ μ μλμ§μ λν λͺ κ°μ§ μμμ λλ€:
- κΈμ΅ μ ν리μΌμ΄μ (κΈλ‘λ²): μ격ν νμ κ²μ¬λ κΈμ΅ κ³μ° μ€λ₯λ₯Ό λ°©μ§νμ¬ μλͺ»λ κ±°λ λλ μ¬κΈ°μ μνμ μ€μΌ μ μμ΅λλ€. `readonly` μμ±μ κ³μ’ λ²νΈλ κ±°λ IDμ κ°μ λ―Όκ°ν κΈμ΅ λ°μ΄ν°λ₯Ό 보νΈνλ λ° μ΄μμ μ λλ€.
- μλ£ μμ€ν (κ΅μ ): νμ μμ μ±μ νμ λ°μ΄ν°μ μ νμ±κ³Ό νλΌμ΄λ²μλ₯Ό 보μ₯νλ λ° λμμ΄ λ μ μμ΅λλ€. ꡬλ³λ μ λμ¨μ λ―Όκ°λ μμ€μ΄ λ€λ₯Έ λ€μν μ νμ μλ£ κΈ°λ‘μ μ²λ¦¬νλ λ° μ¬μ©λ μ μμ΅λλ€. λ€μν λ°μ΄ν° λ³΄νΈ κ·μ μ κ³ λ €ν λ, λ€μν μλ£ μμ€ν μ λ°μμ λ°μ΄ν° 무결μ±μ 보μ₯νλ κ²μ΄ μ€μν©λλ€.
- μ μμκ±°λ νλ«νΌ (μ μΈκ³): μ λ ₯ μ ν¨μ± κ²μ¬ λ° μΆλ ₯ μΈμ½λ©μ μ¬μ©μ μ격 μ¦λͺ λλ κ²°μ μ 보λ₯Ό νμΉ μ μλ XSS 곡격μ λ°©μ§ν μ μμ΅λλ€. TypeScriptλ₯Ό νμ©νλ©΄ λ€μν μΉ λΈλΌμ°μ λ° μ₯μΉμλ λΆκ΅¬νκ³ μ μΈκ³ μ¬μ©μ κΈ°λ°μ 보μμ κ°νν μ μμ΅λλ€.
- μ λΆ μΈνλΌ (λ€μν κ΅κ°): μμ ν μ½λ© κ΄ν λ° μ κΈ°μ μΈ λ³΄μ κ°μ¬λ μ¬μ΄λ² 곡격μΌλ‘λΆν° μ€μν μ λΆ μΈνλΌλ₯Ό 보νΈνλ λ° νμμ μ λλ€. TypeScriptμ μ격 λͺ¨λλ 보μ λͺ¨λ² μ¬λ‘λ₯Ό κ°μ νκ³ μ·¨μ½μ μ μνμ μ€μ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
κ²°λ‘
TypeScriptμ νμ μμ€ν μ λ μμ ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μλΉν μ΄μ μ μ 곡ν©λλ€. μ»΄νμΌ νμμ νμ κ΄λ ¨ μ€λ₯λ₯Ό μ‘μλ΄κ³ , λ°νμ μ€λ₯λ₯Ό μ€μ΄λ©°, μ½λ μ μ§λ³΄μμ±μ ν₯μμν΄μΌλ‘μ¨, TypeScriptλ 곡격 νλ©΄μ μ΅μννκ³ κ΄λ²μν μ·¨μ½μ μ λ°©μ§νλ λ° λμμ μ€λλ€. κ·Έλ¬λ νμ μμ μ±μ΄ λ§λ₯ ν΄κ²°μ± μ μλλλ€. μ§μ μΌλ‘ κ²¬κ³ νκ³ νλ ₯μ μΈ μμ€ν μ ꡬμΆνλ €λ©΄ μμ ν μ½λ© κ΄ν, μ κΈ°μ μΈ λ³΄μ κ°μ¬, κ·Έλ¦¬κ³ μ¬μ μλ°©μ μΈ λ³΄μ μ¬κ³ λ°©μκ³Ό κ²°ν©λμ΄μΌ ν©λλ€. μ΄ κΈμμ μ€λͺ λ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ TypeScriptλ₯Ό κ°λ° μν¬νλ‘μ°μ ν΅ν©ν¨μΌλ‘μ¨, μ ν리μΌμ΄μ μ 보μμ ν¬κ² ν₯μμν€κ³ μ¬μ©μλ₯Ό νΌν΄λ‘λΆν° 보νΈν μ μμ΅λλ€.
μννΈμ¨μ΄κ° κ³μν΄μ 볡μ‘ν΄μ§κ³ μ°λ¦¬ μΆμ λ μ€μν΄μ§μ λ°λΌ, μμ ν μ ν리μΌμ΄μ μ ꡬμΆνλ μ€μμ±μ λμ± μ»€μ§ κ²μ λλ€. TypeScriptλ κ°λ°μκ° μ΄λ¬ν κ³Όμ μ λμ²νκ³ λ μμ νκ³ λ³΄μλ λμ§νΈ μΈμμ λ§λλ κ°λ ₯ν λꡬλ₯Ό μ 곡ν©λλ€.