JavaScriptμ μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό λ§μ€ν°νμ¬ μ°μνκ³ ν¨μ¨μ μΈ μ€νΈλ¦Ό μ°μ° 체μ΄λμ ꡬννμΈμ. νν°, λ§΅, 리λμ€ λ±μΌλ‘ μ μ μ ν리μΌμ΄μ μ μν μ½λλ₯Ό κ°μ νμΈμ.
JavaScript μ΄ν°λ μ΄ν° ν¬νΌ μ»΄ν¬μ§μ : μ μ μ ν리μΌμ΄μ μ μν μ€νΈλ¦Ό μ°μ° 체μ΄λ
μ΅μ JavaScriptλ λ°μ΄ν° 컬λ μ μ λ€λ£¨λ κ°λ ₯ν λꡬλ₯Ό μ 곡ν©λλ€. μ»΄ν¬μ§μ κ°λ κ³Ό κ²°ν©λ μ΄ν°λ μ΄ν° ν¬νΌλ λ°μ΄ν° μ€νΈλ¦Όμ λν 볡μ‘ν μμ μ μννλ μ°μνκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€. μ’ μ’ μ€νΈλ¦Ό μ°μ° 체μ΄λμ΄λΌκ³ λΆλ¦¬λ μ΄ μ κ·Ό λ°©μμ νΉν μ μ μ ν리μΌμ΄μ μμ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ μ½λ κ°λ μ±, μ μ§λ³΄μμ± λ° μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μ΄ν°λ μ΄ν°μ μ΄ν°λ¬λΈ μ΄ν΄νκΈ°
μ΄ν°λ μ΄ν° ν¬νΌμ λν΄ μμΈν μμ보기 μ μ, μ΄ν°λ μ΄ν°μ μ΄ν°λ¬λΈμ κΈ°λ³Έ κ°λ μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
- μ΄ν°λ¬λΈ: μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ λ©μλ(
Symbol.iterator)λ₯Ό μ μνλ κ°μ²΄μ λλ€. λ°°μ΄, λ¬Έμμ΄, Map, Set λ±μ΄ μμμ λλ€. - μ΄ν°λ μ΄ν°:
next()λ©μλλ₯Ό μ μνλ κ°μ²΄λ‘, λ κ°μ§ μμ±μ κ°μ§ κ°μ²΄λ₯Ό λ°νν©λλ€:value(μνμ€μ λ€μ κ°)μdone(λ°λ³΅μ΄ μλ£λμλμ§ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ).
μ΄ λ©μ»€λμ¦μ ν΅ν΄ JavaScriptλ 컬λ μ μ μμλ₯Ό νμ€νλ λ°©μμΌλ‘ μνν μ μμΌλ©°, μ΄λ μ΄ν°λ μ΄ν° ν¬νΌ μλμ κΈ°λ³Έμ λλ€.
μ΄ν°λ μ΄ν° ν¬νΌ μκ°
μ΄ν°λ μ΄ν° ν¬νΌλ μ΄ν°λ¬λΈμμ μλνκ³ μλ‘μ΄ μ΄ν°λ¬λΈ λλ μ΄ν°λ¬λΈμμ νμλ νΉμ κ°μ λ°ννλ ν¨μμ λλ€. μ΄λ₯Ό ν΅ν΄ μΌλ°μ μΈ λ°μ΄ν° μ‘°μ μμ μ κ°κ²°νκ³ μ μΈμ μΈ λ°©μμΌλ‘ μνν μ μμ΅λλ€.
λ€μμ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ μ΄ν°λ μ΄ν° ν¬νΌ μ€ μΌλΆμ λλ€:
map(): μ 곡λ ν¨μλ₯Ό κΈ°λ°μΌλ‘ μ΄ν°λ¬λΈμ κ° μμλ₯Ό λ³ννμ¬ λ³νλ κ°μ ν¬ν¨νλ μ μ΄ν°λ¬λΈμ λ°νν©λλ€.filter(): μ 곡λ 쑰건μ λ°λΌ μ΄ν°λ¬λΈμμ μμλ₯Ό μ ννμ¬ μ‘°κ±΄μ λ§μ‘±νλ μμλ§ ν¬ν¨νλ μ μ΄ν°λ¬λΈμ λ°νν©λλ€.reduce(): ν¨μλ₯Ό μ μ©νμ¬ μ΄ν°λ¬λΈμ μμλ₯Ό λ¨μΌ κ°μΌλ‘ λμ ν©λλ€.forEach(): μ΄ν°λ¬λΈμ κ° μμμ λν΄ μ 곡λ ν¨μλ₯Ό ν λ² μ€νν©λλ€. (μ°Έκ³ :forEachλ μ μ΄ν°λ¬λΈμ λ°ννμ§ μμ΅λλ€.)some(): μ΄ν°λ¬λΈμ μμ μ€ νλλΌλ μ 곡λ 쑰건μ λ§μ‘±νλμ§ νμΈνκ³ λΆλ¦¬μΈ κ°μ λ°νν©λλ€.every(): μ΄ν°λ¬λΈμ λͺ¨λ μμκ° μ 곡λ 쑰건μ λ§μ‘±νλμ§ νμΈνκ³ λΆλ¦¬μΈ κ°μ λ°νν©λλ€.find(): μ 곡λ 쑰건μ λ§μ‘±νλ μ΄ν°λ¬λΈμ 첫 λ²μ§Έ μμλ₯Ό λ°ννκ±°λ, κ·Έλ¬ν μμκ° μμΌλ©΄undefinedλ₯Ό λ°νν©λλ€.findIndex(): μ 곡λ 쑰건μ λ§μ‘±νλ μ΄ν°λ¬λΈμ 첫 λ²μ§Έ μμμ μΈλ±μ€λ₯Ό λ°ννκ±°λ, κ·Έλ¬ν μμκ° μμΌλ©΄ -1μ λ°νν©λλ€.
μ»΄ν¬μ§μ λ° μ€νΈλ¦Ό μ°μ° 체μ΄λ
μ΄ν°λ μ΄ν° ν¬νΌμ μ§μ ν νμ ꡬμ±νκ±°λ μλ‘ μ°κ²°ν μ μλ λ₯λ ₯μμ λμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ¨μΌνκ³ μ½κΈ° μ¬μ΄ ννμμΌλ‘ 볡μ‘ν λ°μ΄ν° λ³νμ μμ±ν μ μμ΅λλ€. μ€νΈλ¦Ό μ°μ° 체μ΄λμ μΌλ ¨μ μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ΄ν°λ¬λΈμ μ μ©νλ κ²μ ν¬ν¨νλ©°, ν ν¬νΌμ μΆλ ₯μ΄ λ€μ ν¬νΌμ μ λ ₯μ΄ λ©λλ€.
λ€μ μμλ₯Ό κ³ λ €ν΄ λ΄ μλ€. νΉμ κ΅κ°(μ: μΌλ³Έ) μΆμ μ΄λ©° 25μΈ μ΄μμΈ λͺ¨λ μ¬μ©μμ μ΄λ¦μ μ°ΎμΌλ €κ³ ν©λλ€:
const users = [
{ name: "Alice", age: 30, country: "USA" },
{ name: "Bob", age: 22, country: "Canada" },
{ name: "Charlie", age: 28, country: "Japan" },
{ name: "David", age: 35, country: "Japan" },
{ name: "Eve", age: 24, country: "UK" },
];
const japaneseUsersOver25 = users
.filter(user => user.country === "Japan")
.filter(user => user.age > 25)
.map(user => user.name);
console.log(japaneseUsersOver25); // Output: ["Charlie", "David"]
μ΄ μμμμλ λ¨Όμ filter()λ₯Ό μ¬μ©νμ¬ μΌλ³Έ μΆμ μ¬μ©μλ₯Ό μ ννκ³ , μ΄μ΄μ λ€λ₯Έ filter()λ₯Ό μ¬μ©νμ¬ 25μΈ μ΄μ μ¬μ©μλ₯Ό μ νν λ€μ, λ§μ§λ§μΌλ‘ map()μ μ¬μ©νμ¬ νν°λ§λ μ¬μ©μμ μ΄λ¦μ μΆμΆν©λλ€. μ΄λ¬ν 체μ΄λ μ κ·Ό λ°©μμ μ½λλ₯Ό μ½κ³ μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
μ€νΈλ¦Ό μ°μ° 체μ΄λμ μ΄μ
- κ°λ μ±: λ°μ΄ν°μ μνλλ μμ μ μμλ₯Ό λͺ ννκ² νννλ―λ‘ μ½λκ° λ μ μΈμ μ΄κ³ μ΄ν΄νκΈ° μ¬μμ§λλ€.
- μ μ§λ³΄μμ±: κ° λ¨κ³κ° λ 립μ μ΄κ³ μ μ μλμ΄ μμΌλ―λ‘ λ°μ΄ν° μ²λ¦¬ λ‘μ§ λ³κ²½μ ꡬννκ³ ν μ€νΈνκΈ°κ° λ μ½μ΅λλ€.
- ν¨μ¨μ±: κ²½μ°μ λ°λΌ μ€νΈλ¦Ό μ°μ° 체μ΄λμ λΆνμν μ€κ° λ°μ΄ν° ꡬ쑰λ₯Ό νΌνμ¬ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. JavaScript μμ§μ κ° λ¨κ³λ§λ€ μμ λ°°μ΄μ μμ±νλ κ²μ νΌνλλ‘ μ²΄μΈν μ°μ°μ μ΅μ νν μ μμ΅λλ€. νΉν, μ λλ μ΄ν° ν¨μμ κ²°ν©λ `Iterator` νλ‘ν μ½μ νμν κ²½μ°μλ§ κ°μ κ³μ°νλ "μ§μ° νκ°"λ₯Ό κ°λ₯νκ² ν©λλ€.
- μ¬μ¬μ©μ±: μ΄ν°λ μ΄ν° ν¬νΌλ μ½κ² μ¬μ¬μ©νκ³ κ²°ν©νμ¬ λ 볡μ‘ν λ°μ΄ν° λ³νμ μμ±ν μ μμ΅λλ€.
μ μ μ ν리μΌμ΄μ κ³ λ €μ¬ν
μ μ μ ν리μΌμ΄μ μ κ°λ°ν λλ νμ§ν(localization), κ΅μ ν(internationalization), λ¬Ένμ μ°¨μ΄μ κ°μ μμλ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ μ΄λ¬ν κ³Όμ λ₯Ό ν΄κ²°νλ λ° νΉν μ μ©ν μ μμ΅λλ€.
νμ§ν (Localization)
νμ§νλ μ ν리μΌμ΄μ
μ νΉμ μΈμ΄μ μ§μμ λ§κ² μ‘°μ νλ κ²μ ν¬ν¨ν©λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ λ°μ΄ν°λ₯Ό νΉμ λ‘μΌμΌμ μ ν©ν νμμΌλ‘ λ³ννλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, map()μ μ¬μ©νμ¬ μ¬μ©μμ λ‘μΌμΌμ λ°λΌ λ μ§, ν΅ν λ° μ«μλ₯Ό νμνν μ μμ΅λλ€.
const prices = [10.99, 25.50, 5.75];
const locale = 'de-DE'; // German locale
const formattedPrices = prices.map(price => {
return price.toLocaleString(locale, { style: 'currency', currency: 'EUR' });
});
console.log(formattedPrices); // Output: [ '10,99\xa0β¬', '25,50\xa0β¬', '5,75\xa0β¬' ]
κ΅μ ν (Internationalization)
κ΅μ νλ μ²μλΆν° μ¬λ¬ μΈμ΄μ μ§μμ μ§μνλλ‘ μ ν리μΌμ΄μ
μ μ€κ³νλ κ²μ ν¬ν¨ν©λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ λ¬Ένμ μ νΈλμ λ°λΌ λ°μ΄ν°λ₯Ό νν°λ§νκ³ μ λ ¬νλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, sort()μ μ¬μ©μ μ μ λΉκ΅ ν¨μλ₯Ό μ¬μ©νμ¬ νΉμ μΈμ΄μ κ·μΉμ λ°λΌ λ¬Έμμ΄μ μ λ ¬ν μ μμ΅λλ€.
const names = ['BjΓΈrn', 'Alice', 'Γ
sa', 'Zoe'];
const locale = 'sv-SE'; // Swedish locale
const sortedNames = [...names].sort((a, b) => a.localeCompare(b, locale));
console.log(sortedNames); // Output: [ 'Alice', 'Γ
sa', 'BjΓΈrn', 'Zoe' ]
λ¬Ένμ μ°¨μ΄
λ¬Ένμ μ°¨μ΄λ μ¬μ©μκ° μ ν리μΌμ΄μ
κ³Ό μνΈ μμ©νλ λ°©μμ μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ μ¬μ©μ μΈν°νμ΄μ€μ λ°μ΄ν° νμλ₯Ό λ€μν λ¬Ένμ κ·λ²μ λ§κ² μ‘°μ νλ λ° μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, map()μ μ¬μ©νμ¬ λ μ§λ₯Ό λ€λ₯Έ νμμΌλ‘ νμνκ±°λ λ€λ₯Έ μΈ‘μ λ¨μλ₯Ό μ¬μ©νλ λ± λ¬Ένμ μ νΈλμ λ°λΌ λ°μ΄ν°λ₯Ό λ³νν μ μμ΅λλ€.
μ€μ©μ μΈ μμ
λ€μμ μ μ μ ν리μΌμ΄μ μμ μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νλ λ°©λ²μ λν λͺ κ°μ§ μΆκ° μ€μ©μ μΈ μμμ λλ€:
μ§μλ³ λ°μ΄ν° νν°λ§
λ€λ₯Έ κ΅κ°μ κ³ κ° λ°μ΄ν° μΈνΈκ° μκ³ , νΉμ μ§μ(μ: μ λ½)μ κ³ κ°λ§ νμνκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
const customers = [
{ name: "Alice", country: "USA", region: "North America" },
{ name: "Bob", country: "Germany", region: "Europe" },
{ name: "Charlie", country: "Japan", region: "Asia" },
{ name: "David", country: "France", region: "Europe" },
];
const europeanCustomers = customers.filter(customer => customer.region === "Europe");
console.log(europeanCustomers);
// Output: [
// { name: "Bob", country: "Germany", region: "Europe" },
// { name: "David", country: "France", region: "Europe" }
// ]
κ΅κ°λ³ νκ· μ£Όλ¬Έ κ°μΉ κ³μ°
μ£Όλ¬Έ λ°μ΄ν° μΈνΈκ° μκ³ , κ° κ΅κ°λ³ νκ· μ£Όλ¬Έ κ°μΉλ₯Ό κ³μ°νκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
const orders = [
{ orderId: 1, customerId: "A", country: "USA", amount: 100 },
{ orderId: 2, customerId: "B", country: "Canada", amount: 200 },
{ orderId: 3, customerId: "A", country: "USA", amount: 150 },
{ orderId: 4, customerId: "C", country: "Canada", amount: 120 },
{ orderId: 5, customerId: "D", country: "Japan", amount: 80 },
];
function calculateAverageOrderValue(orders) {
const countryAmounts = orders.reduce((acc, order) => {
if (!acc[order.country]) {
acc[order.country] = { sum: 0, count: 0 };
}
acc[order.country].sum += order.amount;
acc[order.country].count++;
return acc;
}, {});
const averageOrderValues = Object.entries(countryAmounts).map(([country, data]) => ({
country,
average: data.sum / data.count,
}));
return averageOrderValues;
}
const averageOrderValues = calculateAverageOrderValue(orders);
console.log(averageOrderValues);
// Output: [
// { country: "USA", average: 125 },
// { country: "Canada", average: 160 },
// { country: "Japan", average: 80 }
// ]
λ‘μΌμΌμ λ°λ₯Έ λ μ§ νμ μ§μ
μ΄λ²€νΈ λ°μ΄ν° μΈνΈκ° μκ³ , μ¬μ©μμ λ‘μΌμΌμ μ ν©ν νμμΌλ‘ μ΄λ²€νΈ λ μ§λ₯Ό νμνκ³ μΆλ€κ³ κ°μ ν΄ λ΄ μλ€.
const events = [
{ name: "Conference", date: new Date("2024-03-15") },
{ name: "Workshop", date: new Date("2024-04-20") },
];
const locale = 'fr-FR'; // French locale
const formattedEvents = events.map(event => ({
name: event.name,
date: event.date.toLocaleDateString(locale),
}));
console.log(formattedEvents);
// Output: [
// { name: "Conference", date: "15/03/2024" },
// { name: "Workshop", date: "20/04/2024" }
// ]
κ³ κΈ κΈ°μ : μ λλ μ΄ν°μ μ§μ° νκ°
λ§€μ° ν° λ°μ΄ν° μΈνΈμ κ²½μ°, 체μΈμ κ° λ¨κ³μμ μ€κ° λ°°μ΄μ μμ±νλ κ²μ λΉν¨μ¨μ μΌ μ μμ΅λλ€. JavaScriptλ μ λλ μ΄ν°μ `Iterator` νλ‘ν μ½μ μ 곡νλ©°, μ΄λ₯Ό νμ©νμ¬ μ§μ° νκ°(lazy evaluation)λ₯Ό ꡬνν μ μμ΅λλ€. μ΄λ λ°μ΄ν°κ° μ€μ λ‘ νμν λλ§ μ²λ¦¬λ¨μ μλ―Ένμ¬ λ©λͺ¨λ¦¬ μλΉλ₯Ό μ€μ΄κ³ μ±λ₯μ ν₯μμν΅λλ€.
function* filter(iterable, predicate) {
for (const item of iterable) {
if (predicate(item)) {
yield item;
}
}
}
function* map(iterable, transform) {
for (const item of iterable) {
yield transform(item);
}
}
const largeArray = Array.from({ length: 1000000 }, (_, i) => i);
const evenNumbers = filter(largeArray, x => x % 2 === 0);
const squaredEvenNumbers = map(evenNumbers, x => x * x);
// Only calculate the first 10 squared even numbers
const firstTen = [];
for (let i = 0; i < 10; i++) {
firstTen.push(squaredEvenNumbers.next().value);
}
console.log(firstTen);
μ΄ μμμμ filter λ° map ν¨μλ μ λλ μ΄ν°λ‘ ꡬνλ©λλ€. μ΄λ€μ μ 체 λ°°μ΄μ ν λ²μ μ²λ¦¬νμ§ μμ΅λλ€. λμ , νμν λ κ°μ μμ±(yield)νλ©°, μ΄λ μ 체 λ°μ΄ν° μΈνΈλ₯Ό 미리 μ²λ¦¬νλ κ²μ΄ λ무 λΉμ©μ΄ λ§μ΄ λλ λκ·λͺ¨ λ°μ΄ν° μΈνΈμ νΉν μ μ©ν©λλ€.
μΌλ°μ μΈ ν¨μ κ³Ό λͺ¨λ² μ¬λ‘
- κ³Όλν 체μ΄λ: 체μ΄λμ κ°λ ₯νμ§λ§, κ³Όλν 체μ΄λμ λλλ‘ μ½λλ₯Ό μ½κΈ° μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€. νμν κ²½μ° λ³΅μ‘ν μμ μ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λ¨κ³λ‘ λλλλ€.
- λΆμμ©: μ΄ν°λ μ΄ν° ν¬νΌ ν¨μ λ΄μμ λΆμμ©μ νΌνμΈμ. μ΄λ μ½λλ₯Ό μΆλ‘ νκ³ λλ²κΉ νκΈ° μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ μ΄μμ μΌλ‘λ μ λ ₯ μΈμμλ§ μμ‘΄νλ μμ ν¨μμ¬μΌ ν©λλ€.
- μ±λ₯: λκ·λͺ¨ λ°μ΄ν° μΈνΈλ‘ μμ ν λ μ±λ₯μ λ―ΈμΉλ μν₯μ μΌλμ λμΈμ. λΆνμν λ©λͺ¨λ¦¬ μλΉλ₯Ό νΌνκΈ° μν΄ μ λλ μ΄ν°μ μ§μ° νκ°λ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμΈμ.
- λΆλ³μ±:
mapλ°filterμ κ°μ μ΄ν°λ μ΄ν° ν¬νΌλ μ μ΄ν°λ¬λΈμ λ°ννμ¬ μλ³Έ λ°μ΄ν°λ₯Ό 보쑴ν©λλ€. μ΄λ¬ν λΆλ³μ±μ μμ©νμ¬ μμμΉ λͺ»ν λΆμμ©μ νΌνκ³ μ½λλ₯Ό λ μμΈ‘ κ°λ₯νκ² λ§λμΈμ. - μ€λ₯ μ²λ¦¬: μμμΉ λͺ»ν λ°μ΄ν°λ 쑰건μ μ μμ μΌλ‘ μ²λ¦¬νκΈ° μν΄ μ΄ν°λ μ΄ν° ν¬νΌ ν¨μ λ΄μ μ μ ν μ€λ₯ μ²λ¦¬λ₯Ό ꡬννμΈμ.
κ²°λ‘
JavaScript μ΄ν°λ μ΄ν° ν¬νΌλ 볡μ‘ν λ°μ΄ν° λ³νμ κ°κ²°νκ³ μ½κΈ° μ¬μ΄ λ°©μμΌλ‘ μννλ κ°λ ₯νκ³ μ μ°ν λ°©λ²μ μ 곡ν©λλ€. μ»΄ν¬μ§μ κ³Ό μ€νΈλ¦Ό μ°μ° 체μ΄λμ μμΉμ μ΄ν΄ν¨μΌλ‘μ¨ λ ν¨μ¨μ μ΄κ³ μ μ§λ³΄μ κ°λ₯νλ©° μ μμ μΈ μ ν리μΌμ΄μ μ μμ±ν μ μμ΅λλ€. μ μ μ ν리μΌμ΄μ μ κ°λ°ν λλ νμ§ν, κ΅μ ν, λ¬Ένμ μ°¨μ΄μ κ°μ μμλ₯Ό κ³ λ €νκ³ μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νμ¬ νΉμ μΈμ΄, μ§μ λ° λ¬Ένμ κ·λ²μ λ§κ² μ ν리μΌμ΄μ μ μ‘°μ νμΈμ. μ΄ν°λ μ΄ν° ν¬νΌμ νμ λ°μλ€μ΄κ³ JavaScript νλ‘μ νΈμμ λ°μ΄ν° μ‘°μμ μν μλ‘μ΄ κ°λ₯μ±μ μ΄μ΄λ³΄μΈμ.
λν, μ λλ μ΄ν°μ μ§μ° νκ° κΈ°μ μ λ§μ€ν°νλ©΄ νΉν λ§€μ° ν° λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ μ½λ μ±λ₯μ μ΅μ νν μ μμ΅λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ μΌλ°μ μΈ ν¨μ μ νΌν¨μΌλ‘μ¨ μ½λκ° κ²¬κ³ νκ³ μμ μ μ΄λ©° νμ₯ κ°λ₯νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.