ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ₯Ό μ¬μ©νμ¬ μλ°μ€ν¬λ¦½νΈμ κ³ κΈ νμ μΆλ‘ κΈ°μ μ νμνμΈμ. λ κ²¬κ³ νκ³ μ μ§λ³΄μ κ°λ₯νλ©° μμΈ‘ κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ ν¨ν΄ λ§€μΉ & νμ μ’νκΈ°: κ²¬κ³ ν μ½λλ₯Ό μν κ³ κΈ νμ μΆλ‘
λμ νμ μΈμ΄μΈ μλ°μ€ν¬λ¦½νΈλ μ μ λΆμκ³Ό μ»΄νμΌ νμ 체ν¬λ‘λΆν° ν° μ΄μ μ μ»μ΅λλ€. μλ°μ€ν¬λ¦½νΈμ μμ μ§ν©μΈ νμ μ€ν¬λ¦½νΈλ μ μ νμ΄νμ λμ νμ¬ μ½λ νμ§μ ν¬κ² ν₯μμν΅λλ€. κ·Έλ¬λ μΌλ° μλ°μ€ν¬λ¦½νΈλ νμ μ€ν¬λ¦½νΈμ νμ μμ€ν μμλ, μ°λ¦¬λ ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ° κ°μ κΈ°μ μ νμ©νμ¬ λ κ³ κΈ νμ μΆλ‘ μ λ¬μ±νκ³ λ κ²¬κ³ νλ©° μ μ§λ³΄μνκΈ° μ½κ³ μμΈ‘ κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€. μ΄ κΈμμλ μ€μ©μ μΈ μμ μ ν¨κ» μ΄λ¬ν κ°λ ₯ν κ°λ λ€μ νꡬν©λλ€.
νμ μΆλ‘ μ΄ν΄νκΈ°
νμ μΆλ‘ μ μ»΄νμΌλ¬(λλ μΈν°ν리ν°)κ° λͺ μμ μΈ νμ μ£Όμ μμ΄ λ³μλ ννμμ νμ μ μλμΌλ‘ μΆλ‘ νλ λ₯λ ₯μ λλ€. μλ°μ€ν¬λ¦½νΈλ κΈ°λ³Έμ μΌλ‘ λ°νμ νμ μΆλ‘ μ ν¬κ² μμ‘΄ν©λλ€. νμ μ€ν¬λ¦½νΈλ μ΄λ₯Ό ν λ¨κ³ λ λ°μ μμΌ μ»΄νμΌ νμ νμ μΆλ‘ μ μ 곡ν¨μΌλ‘μ¨ μ½λλ₯Ό μ€ννκΈ° μ μ νμ μ€λ₯λ₯Ό λ°κ²¬ν μ μκ² ν΄μ€λλ€.
λ€μ μλ°μ€ν¬λ¦½νΈ(λλ νμ μ€ν¬λ¦½νΈ) μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
let x = 10; // νμ
μ€ν¬λ¦½νΈλ xλ₯Ό 'number' νμ
μΌλ‘ μΆλ‘ ν©λλ€
let y = "Hello"; // νμ
μ€ν¬λ¦½νΈλ yλ₯Ό 'string' νμ
μΌλ‘ μΆλ‘ ν©λλ€
function add(a: number, b: number) { // νμ
μ€ν¬λ¦½νΈμ λͺ
μμ νμ
μ£Όμ
return a + b;
}
let result = add(x, 5); // νμ
μ€ν¬λ¦½νΈλ resultλ₯Ό 'number' νμ
μΌλ‘ μΆλ‘ ν©λλ€
// let error = add(x, y); // μ΄ μ½λλ μ»΄νμΌ νμμ νμ
μ€ν¬λ¦½νΈ μ€λ₯λ₯Ό λ°μμν΅λλ€
κΈ°λ³Έμ μΈ νμ μΆλ‘ μ μ μ©νμ§λ§, 볡μ‘ν λ°μ΄ν° ꡬ쑰μ μ‘°κ±΄λΆ λ‘μ§μ λ€λ£° λλ μ’ μ’ λΆμ‘±ν©λλ€. λ°λ‘ μ΄ μ§μ μμ ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°κ° μν μ ν©λλ€.
ν¨ν΄ λ§€μΉ: λμμ λ°μ΄ν° νμ λͺ¨λ°©νκΈ°
νμ€μΌ, μ€μΉΌλΌ, λ¬μ€νΈμ κ°μ ν¨μν νλ‘κ·Έλλ° μΈμ΄μμ νν λ³Ό μ μλ ν¨ν΄ λ§€μΉμ λ°μ΄ν°μ λͺ¨μμ΄λ ꡬ쑰μ λ°λΌ λ°μ΄ν°λ₯Ό λΆν΄νκ³ λ€λ₯Έ λμμ μνν μ μκ² ν΄μ€λλ€. μλ°μ€ν¬λ¦½νΈμλ λ€μ΄ν°λΈ ν¨ν΄ λ§€μΉ κΈ°λ₯μ΄ μμ§λ§, μ¬λ¬ κΈ°μ μ μ‘°ν©μ μ¬μ©νμ¬, νΉν νμ μ€ν¬λ¦½νΈμ νλ³λ μ λμ¨(discriminated unions)κ³Ό κ²°ν©ν λ μ΄λ₯Ό λͺ¨λ°©ν μ μμ΅λλ€.
νλ³λ μ λμ¨ (Discriminated Unions)
νλ³λ μ λμ¨(νκ·Έ μ λμ¨ λλ κ°λ³ νμ μ΄λΌκ³ λ ν¨)μ μ¬λ¬ κ°μ ꡬλ³λλ νμ μΌλ‘ ꡬμ±λ νμ μΌλ‘, κ° νμ μ κ·Έλ€μ ꡬλ³ν μ μκ² ν΄μ£Όλ 곡ν΅λ νλ³ μμ±("νκ·Έ")μ κ°μ§λλ€. μ΄κ²μ ν¨ν΄ λ§€μΉμ λͺ¨λ°©νκΈ° μν μ€μν κ΅¬μ± μμμ λλ€.
μ΄λ€ μ°μ°μ λ€μν μ’ λ₯μ κ²°κ³Όλ₯Ό λνλ΄λ μμ λ₯Ό μκ°ν΄ λ΄ μλ€:
// TypeScript
type Success = { kind: "success"; value: T };
type Failure = { kind: "failure"; error: string };
type Result = Success | Failure;
function processData(data: string): Result {
if (data === "valid") {
return { kind: "success", value: 42 };
} else {
return { kind: "failure", error: "Invalid data" };
}
}
const result = processData("valid");
// μ΄μ , 'result' λ³μλ₯Ό μ΄λ»κ² μ²λ¦¬ν κΉμ?
Result νμ
μ νλ³λ μ λμ¨μ
λλ€. μ΄κ²μ value μμ±μ κ°μ§ Successμ΄κ±°λ error μμ±μ κ°μ§ FailureμΌ μ μμ΅λλ€. kind μμ±μ΄ νλ³μ μν μ ν©λλ€.
μ‘°κ±΄λΆ λ‘μ§μ μ΄μ©ν νμ μ’νκΈ°
νμ
μ’νκΈ°λ μ‘°κ±΄λΆ λ‘μ§μ΄λ λ°νμ 체ν¬λ₯Ό κΈ°λ°μΌλ‘ λ³μμ νμ
μ λ ꡬ체μ μΌλ‘ μ μ νλ κ³Όμ μ
λλ€. νμ
μ€ν¬λ¦½νΈμ νμ
κ²μ¬κΈ°λ μ μ΄ νλ¦ λΆμμ μ¬μ©νμ¬ μ‘°κ±΄λΆ λΈλ‘ λ΄μμ νμ
μ΄ μ΄λ»κ² λ³νλμ§ μ΄ν΄ν©λλ€. μ°λ¦¬λ μ΄λ₯Ό νμ©νμ¬ νλ³λ μ λμ¨μ kind μμ±μ κΈ°λ°μΌλ‘ λμμ μνν μ μμ΅λλ€.
// TypeScript
if (result.kind === "success") {
// μ΄μ νμ
μ€ν¬λ¦½νΈλ 'result'κ° 'Success' νμ
μμ μλλ€
console.log("μ±κ³΅! κ°:", result.value); // μ¬κΈ°μλ νμ
μ€λ₯κ° μμ΅λλ€
} else {
// μ΄μ νμ
μ€ν¬λ¦½νΈλ 'result'κ° 'Failure' νμ
μμ μλλ€
console.error("μ€ν¨! μ€λ₯:", result.error);
}
if λΈλ‘ μμμ, νμ
μ€ν¬λ¦½νΈλ resultκ° SuccessλΌλ κ²μ μκΈ° λλ¬Έμ νμ
μ€λ₯ μμ΄ μμ νκ² result.valueμ μ κ·Όν μ μμ΅λλ€. λ§μ°¬κ°μ§λ‘, else λΈλ‘ μμμ, νμ
μ€ν¬λ¦½νΈλ κ·Έκ²μ΄ FailureλΌλ κ²μ μκ³ result.errorμ λν μ κ·Όμ νμ©ν©λλ€.
κ³ κΈ νμ μ’νκΈ° κΈ°λ²
λ¨μν if λ¬Έμ λμ΄, νμ
μ λ ν¨κ³Όμ μΌλ‘ μ’νκΈ° μν΄ λͺ κ°μ§ κ³ κΈ κΈ°μ μ μ¬μ©ν μ μμ΅λλ€.
typeof λ° instanceof κ°λ
typeofμ instanceof μ°μ°μλ λ°νμ 체ν¬λ₯Ό κΈ°λ°μΌλ‘ νμ
μ μ μ νλ λ° μ¬μ©λ μ μμ΅λλ€.
function processValue(value: string | number) {
if (typeof value === "string") {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'value'κ° λ¬Έμμ΄μμ μλλ€
console.log("κ°μ λ¬Έμμ΄μ
λλ€:", value.toUpperCase());
} else {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'value'κ° μ«μμμ μλλ€
console.log("κ°μ μ«μμ
λλ€:", value * 2);
}
}
processValue("hello");
processValue(10);
class MyClass {}
function processObject(obj: MyClass | string) {
if (obj instanceof MyClass) {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'obj'κ° MyClassμ μΈμ€ν΄μ€μμ μλλ€
console.log("κ°μ²΄λ MyClassμ μΈμ€ν΄μ€μ
λλ€");
} else {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'obj'κ° λ¬Έμμ΄μμ μλλ€
console.log("κ°μ²΄λ λ¬Έμμ΄μ
λλ€:", obj.toUpperCase());
}
}
processObject(new MyClass());
processObject("world");
μ¬μ©μ μ μ νμ κ°λ ν¨μ
λ 볡μ‘ν νμ κ²μ¬λ₯Ό μννκ³ μ μ λ νμ μ λν΄ νμ μ€ν¬λ¦½νΈμ μ리기 μν΄ μμ λ§μ νμ κ°λ ν¨μλ₯Ό μ μν μ μμ΅λλ€.
// TypeScript
interface Bird { fly: () => void; layEggs: () => void; }
interface Fish { swim: () => void; layEggs: () => void; }
function isBird(animal: Bird | Fish): animal is Bird {
return (animal as Bird).fly !== undefined; // λ νμ΄ν: 'fly'λ₯Ό κ°μ§κ³ μλ€λ©΄, BirdμΌ κ°λ₯μ±μ΄ λμ΅λλ€
}
function makeSound(animal: Bird | Fish) {
if (isBird(animal)) {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'animal'μ΄ Birdμμ μλλ€
console.log("μ§Ήμ§Ή!");
animal.fly();
} else {
// μ¬κΈ°μ νμ
μ€ν¬λ¦½νΈλ 'animal'μ΄ Fishμμ μλλ€
console.log("λ»λ!");
animal.swim();
}
}
const myBird: Bird = { fly: () => console.log("λλ μ€!"), layEggs: () => console.log("μ λ³λ μ€!") };
const myFish: Fish = { swim: () => console.log("ν€μμΉλ μ€!"), layEggs: () => console.log("μ λ³λ μ€!") };
makeSound(myBird);
makeSound(myFish);
isBirdμμ animal is Bird λ°ν νμ
μ£Όμμ λ§€μ° μ€μν©λλ€. μ΄κ²μ λ§μ½ ν¨μκ° trueλ₯Ό λ°ννλ©΄, animal λ§€κ°λ³μκ° νμ€ν Bird νμ
μ΄λΌλ κ²μ νμ
μ€ν¬λ¦½νΈμ μλ €μ€λλ€.
never νμ
μ μ΄μ©ν μμ μ± κ²μ¬
νλ³λ μ λμ¨μΌλ‘ μμ
ν λ, λͺ¨λ κ°λ₯ν μΌμ΄μ€λ₯Ό μ²λ¦¬νλμ§ νμΈνλ κ²μ΄ μ’
μ’
μ μ©ν©λλ€. never νμ
μ΄ μ΄μ λμμ΄ λ μ μμ΅λλ€. never νμ
μ *μ λ* λ°μνμ§ μλ κ°λ€μ λνλ
λλ€. νΉμ μ½λ κ²½λ‘μ λλ¬ν μ μλ€λ©΄, λ³μμ neverλ₯Ό ν λΉν μ μμ΅λλ€. μ΄λ μ λμ¨ νμ
μ switch λ¬ΈμΌλ‘ μ²λ¦¬ν λ μμ μ±μ 보μ₯νλ λ° μ μ©ν©λλ€.
// TypeScript
type Shape = { kind: "circle", radius: number } | { kind: "square", sideLength: number } | { kind: "triangle", base: number, height: number };
function getArea(shape: Shape): number {
switch (shape.kind) {
case "circle":
return Math.PI * shape.radius * shape.radius;
case "square":
return shape.sideLength * shape.sideLength;
case "triangle":
return 0.5 * shape.base * shape.height;
default:
const _exhaustiveCheck: never = shape; // λͺ¨λ μΌμ΄μ€κ° μ²λ¦¬λλ©΄, 'shape'λ 'never'κ° λ©λλ€
return _exhaustiveCheck; // μ΄ μ€μ Shape νμ
μ μλ‘μ΄ λνμ΄ μΆκ°λκ³ switch λ¬Έμ΄ μ
λ°μ΄νΈλμ§ μμΌλ©΄ μ»΄νμΌ νμ μ€λ₯λ₯Ό λ°μμν΅λλ€.
}
}
const circle: Shape = { kind: "circle", radius: 5 };
const square: Shape = { kind: "square", sideLength: 10 };
const triangle: Shape = { kind: "triangle", base: 8, height: 6 };
console.log("μ λμ΄:", getArea(circle));
console.log("μ μ¬κ°ν λμ΄:", getArea(square));
console.log("μΌκ°ν λμ΄:", getArea(triangle));
//λ§μ½ μλ‘μ΄ λνμ μΆκ°νλ©΄, μλ₯Ό λ€μ΄,
// type Shape = { kind: "circle", radius: number } | { kind: "square", sideLength: number } | { kind: "rectangle", width: number, height: number };
//μ»΄νμΌλ¬λ const _exhaustiveCheck: never = shape; μ€μμ λΆνν κ²μ
λλ€. μλνλ©΄ μ»΄νμΌλ¬λ shape κ°μ²΄κ° { kind: "rectangle", width: number, height: number }μΌ μ μλ€λ κ²μ μΈμ§νκΈ° λλ¬Έμ
λλ€.
//μ΄κ²μ μ½λμμ μ λμ¨ νμ
μ λͺ¨λ μΌμ΄μ€λ₯Ό μ²λ¦¬νλλ‘ κ°μ ν©λλ€.
λ§μ½ Shape νμ
μ μλ‘μ΄ λν(μ: rectangle)μ μΆκ°νκ³ switch λ¬Έμ μ
λ°μ΄νΈνμ§ μμΌλ©΄, default μΌμ΄μ€μ λλ¬νκ² λκ³ , νμ
μ€ν¬λ¦½νΈλ μλ‘μ΄ λν νμ
μ neverμ ν λΉν μ μκΈ° λλ¬Έμ μ€λ₯λ₯Ό λ°μμν΅λλ€. μ΄κ²μ μ μ¬μ μΈ μ€λ₯λ₯Ό ν¬μ°©νκ³ λͺ¨λ κ°λ₯ν μΌμ΄μ€λ₯Ό μ²λ¦¬νλλ‘ λ³΄μ₯νλ λ° λμμ΄ λ©λλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°κ° νΉν μ μ©ν λͺ κ°μ§ μ€μ©μ μΈ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
API μλ΅ μ²λ¦¬νκΈ°
API μλ΅μ μμ²μ μ±κ³΅ λλ μ€ν¨μ λ°λΌ μ’ μ’ λ€λ₯Έ νμμΌλ‘ μ 곡λ©λλ€. νλ³λ μ λμ¨μ μ¬μ©νμ¬ μ΄λ¬ν λ€λ₯Έ μλ΅ νμ μ λνλΌ μ μμ΅λλ€.
// TypeScript
type APIResponseSuccess = { status: "success"; data: T };
type APIResponseError = { status: "error"; message: string };
type APIResponse = APIResponseSuccess | APIResponseError;
async function fetchData(url: string): Promise> {
try {
const response = await fetch(url);
const data = await response.json();
if (response.ok) {
return { status: "success", data: data as T };
} else {
return { status: "error", message: data.message || "Unknown error" };
}
} catch (error) {
return { status: "error", message: error.message || "Network error" };
}
}
// Example Usage
async function getProducts() {
const response = await fetchData("/api/products");
if (response.status === "success") {
const products = response.data;
products.forEach(product => console.log(product.name));
} else {
console.error("μ ν κ°μ Έμ€κΈ° μ€ν¨:", response.message);
}
}
interface Product {
id: number;
name: string;
price: number;
}
μ΄ μμ μμ, APIResponse νμ
μ λ°μ΄ν°κ° μλ μ±κ³΅μ μΈ μλ΅ λλ λ©μμ§κ° μλ μ€λ₯ μλ΅μ λνλ
λλ€. status μμ±μ΄ νλ³μ μν μ νμ¬ μλ΅μ μ μ νκ² μ²λ¦¬ν μ μκ² ν΄μ€λλ€.
μ¬μ©μ μ λ ₯ μ²λ¦¬νκΈ°
μ¬μ©μ μ λ ₯μ μ’ μ’ μ ν¨μ± κ²μ¬μ νμ±μ΄ νμν©λλ€. ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ₯Ό μ¬μ©νμ¬ λ€μν μ λ ₯ μ νμ μ²λ¦¬νκ³ λ°μ΄ν° 무결μ±μ 보μ₯ν μ μμ΅λλ€.
// TypeScript
type ValidEmail = { kind: "valid"; email: string };
type InvalidEmail = { kind: "invalid"; error: string };
type EmailValidationResult = ValidEmail | InvalidEmail;
function validateEmail(email: string): EmailValidationResult {
if (/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(email)) {
return { kind: "valid", email: email };
} else {
return { kind: "invalid", error: "Invalid email format" };
}
}
const emailInput = "test@example.com";
const validationResult = validateEmail(emailInput);
if (validationResult.kind === "valid") {
console.log("μ ν¨ν μ΄λ©μΌ:", validationResult.email);
// μ ν¨ν μ΄λ©μΌ μ²λ¦¬
} else {
console.error("μ ν¨νμ§ μμ μ΄λ©μΌ:", validationResult.error);
// μ¬μ©μμκ² μ€λ₯ λ©μμ§ νμ
}
const invalidEmailInput = "testexample";
const invalidValidationResult = validateEmail(invalidEmailInput);
if (invalidValidationResult.kind === "valid") {
console.log("μ ν¨ν μ΄λ©μΌ:", invalidValidationResult.email);
// μ ν¨ν μ΄λ©μΌ μ²λ¦¬
} else {
console.error("μ ν¨νμ§ μμ μ΄λ©μΌ:", invalidValidationResult.error);
// μ¬μ©μμκ² μ€λ₯ λ©μμ§ νμ
}
EmailValidationResult νμ
μ μ ν¨ν μ΄λ©μΌ λλ μ€λ₯ λ©μμ§κ° μλ μ ν¨νμ§ μμ μ΄λ©μΌμ λνλ
λλ€. μ΄λ₯Ό ν΅ν΄ λ κ²½μ°λ₯Ό λͺ¨λ μ μμ μΌλ‘ μ²λ¦¬νκ³ μ¬μ©μμκ² μ μ΅ν νΌλλ°±μ μ 곡ν μ μμ΅λλ€.
ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°μ μ΄μ
- μ½λ κ²¬κ³ μ± ν₯μ: λ€μν λ°μ΄ν° νμ κ³Ό μλ리μ€λ₯Ό λͺ μμ μΌλ‘ μ²λ¦¬ν¨μΌλ‘μ¨ λ°νμ μ€λ₯μ μνμ μ€μ λλ€.
- μ½λ μ μ§λ³΄μμ± ν₯μ: ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ₯Ό μ¬μ©νλ μ½λλ λ€μν λ°μ΄ν° ꡬ쑰λ₯Ό μ²λ¦¬νλ λ‘μ§μ λͺ ννκ² νννκΈ° λλ¬Έμ μΌλ°μ μΌλ‘ μ΄ν΄νκ³ μ μ§ κ΄λ¦¬νκΈ°κ° λ μ½μ΅λλ€.
- μ½λ μμΈ‘ κ°λ₯μ± μ¦κ°: νμ μ’νκΈ°λ μ»΄νμΌλ¬κ° μ»΄νμΌ νμμ μ½λμ μ νμ±μ κ²μ¦ν μ μλλ‘ νμ¬ μ½λλ₯Ό λ μμΈ‘ κ°λ₯νκ³ μ λ’°ν μ μκ² λ§λλλ€.
- λ λμ κ°λ°μ κ²½ν: νμ μ€ν¬λ¦½νΈμ νμ μμ€ν μ μ μ©ν νΌλλ°±κ³Ό μλ μμ±μ μ 곡νμ¬ κ°λ°μ λ ν¨μ¨μ μ΄κ³ μ€λ₯ λ°μ κ°λ₯μ±μ μ€μ¬μ€λλ€.
κ³Όμ λ° κ³ λ €μ¬ν
- 볡μ‘μ±: ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ₯Ό ꡬννλ κ²μ λλλ‘ μ½λμ 볡μ‘μ±μ λν μ μμΌλ©°, νΉν 볡μ‘ν λ°μ΄ν° ꡬ쑰λ₯Ό λ€λ£° λ κ·Έλ μ΅λλ€.
- νμ΅ κ³‘μ : ν¨μν νλ‘κ·Έλλ° κ°λ μ μ΅μνμ§ μμ κ°λ°μλ μ΄λ¬ν κΈ°μ μ λ°°μ°λ λ° μκ°μ ν¬μν΄μΌ ν μ μμ΅λλ€.
- λ°νμ μ€λ²ν€λ: νμ μ’νκΈ°λ μ£Όλ‘ μ»΄νμΌ νμμ λ°μνμ§λ§, μΌλΆ κΈ°μ μ μ΅μνμ λ°νμ μ€λ²ν€λλ₯Ό μ λ°ν μ μμ΅λλ€.
λμ λ° μ μΆ©μ
ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ κ°λ ₯ν κΈ°μ μ΄μ§λ§ νμ μ΅μμ ν΄κ²°μ± μ μλλλ€. κ³ λ €ν λ€λ₯Έ μ κ·Ό λ°©μμ λ€μκ³Ό κ°μ΅λλ€:
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (OOP): OOPλ λ€νμ±κ³Ό μΆμνλ₯Ό μν λ©μ»€λμ¦μ μ 곡νμ¬ λλ‘λ μ μ¬ν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€. κ·Έλ¬λ OOPλ μ’ μ’ λ 볡μ‘ν μ½λ ꡬ쑰μ μμ κ³μΈ΅μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- λ νμ΄ν: λ νμ΄νμ λ°νμ κ²μ¬μ μμ‘΄νμ¬ κ°μ²΄κ° νμν μμ±μ΄λ λ©μλλ₯Ό κ°μ§κ³ μλμ§ νμΈν©λλ€. μ μ°νμ§λ§, μμλλ μμ±μ΄ μλ κ²½μ° λ°νμ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ λμ¨ νμ (νλ³μ μλ): μ λμ¨ νμ μ μ μ©νμ§λ§, ν¨ν΄ λ§€μΉμ λ κ²¬κ³ νκ² λ§λλ λͺ μμ μΈ νλ³ μμ±μ΄ λΆμ‘±ν©λλ€.
μ΅μμ μ κ·Ό λ°©μμ νλ‘μ νΈμ νΉμ μꡬ μ¬νκ³Ό μμ μ€μΈ λ°μ΄ν° ꡬ쑰μ 볡μ‘μ±μ λ°λΌ λ€λ¦ λλ€.
μ μμ κ³ λ €μ¬ν
κ΅μ μ μΈ μ¬μ©μλ₯Ό λμμΌλ‘ μμ ν λλ λ€μμ κ³ λ €νμμμ€:
- λ°μ΄ν° νμ§ν: μ€λ₯ λ©μμ§μ μ¬μ©μμκ² νμλλ ν μ€νΈκ° λ€λ₯Έ μΈμ΄μ μ§μμ λ§κ² νμ§νλμλμ§ νμΈν©λλ€.
- λ μ§ λ° μκ° νμ: μ¬μ©μμ λ‘μΌμΌμ λ°λΌ λ μ§ λ° μκ° νμμ μ²λ¦¬ν©λλ€.
- ν΅ν: μ¬μ©μμ λ‘μΌμΌμ λ°λΌ ν΅ν κΈ°νΈμ κ°μ νμν©λλ€.
- λ¬Έμ μΈμ½λ©: λ€μν μΈμ΄μ κ΄λ²μν λ¬Έμλ₯Ό μ§μνκΈ° μν΄ UTF-8 μΈμ½λ©μ μ¬μ©ν©λλ€.
μλ₯Ό λ€μ΄, μ¬μ©μ μ λ ₯μ κ²μ¦ν λ, μ ν¨μ± κ²μ¬ κ·μΉμ΄ μ¬λ¬ κ΅κ°μμ μ¬μ©λλ λ€μν λ¬Έμ μ§ν© λ° μ λ ₯ νμμ μ ν©νμ§ νμΈνμμμ€.
κ²°λ‘
ν¨ν΄ λ§€μΉκ³Ό νμ μ’νκΈ°λ λ κ²¬κ³ νκ³ , μ μ§λ³΄μ κ°λ₯νλ©°, μμΈ‘ κ°λ₯ν μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±νκΈ° μν κ°λ ₯ν κΈ°μ μ λλ€. νλ³λ μ λμ¨, νμ κ°λ ν¨μ λ° κΈ°ν κ³ κΈ νμ μΆλ‘ λ©μ»€λμ¦μ νμ©νμ¬ μ½λμ νμ§μ ν₯μμν€κ³ λ°νμ μ€λ₯μ μνμ μ€μΌ μ μμ΅λλ€. μ΄λ¬ν κΈ°μ μ νμ μ€ν¬λ¦½νΈμ νμ μμ€ν κ³Ό ν¨μν νλ‘κ·Έλλ° κ°λ μ λν λ κΉμ μ΄ν΄λ₯Ό νμλ‘ ν μ μμ§λ§, νΉν λμ μμ€μ μ λ’°μ±κ³Ό μ μ§λ³΄μμ±μ μꡬνλ 볡μ‘ν νλ‘μ νΈμ κ²½μ° κ·Έ μ΄μ μ λ Έλ ₯ν κ°μΉκ° μΆ©λΆν©λλ€. νμ§ν λ° λ°μ΄ν° νμκ³Ό κ°μ μ μμ μμλ₯Ό κ³ λ €ν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μ λ€μν μ¬μ©μμκ² ν¨κ³Όμ μΌλ‘ λμν μ μμ΅λλ€.