๊ฐ๋ ์กฐ๊ฑด ํ๊ฐ๋ฅผ ์ต์ ํํ์ฌ JavaScript ํจํด ๋งค์นญ์ ์ต๊ณ ์ฑ๋ฅ์ ๋ฌ์ฑํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์์ ํจ์จ์ ์ธ ์กฐ๊ฑด๋ถ ๋ก์ง์ ์ํ ๊ณ ๊ธ ๊ธฐ์ ์ ์ดํด๋ณด์ธ์.
JavaScript ํจํด ๋งค์นญ ๊ฐ๋ ์ฑ๋ฅ: ์กฐ๊ฑด ํ๊ฐ ์ต์ ํ
ํ๋ ์น ๊ฐ๋ฐ์ ์ด์์ธ JavaScript๋ ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ํจํด ๋งค์นญ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ฑ์ฅ์ผ๋ก ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ๊ตฌ์กฐํํ๊ณ ๋ณต์กํ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ์ ๋๊ตฌ๋ฅผ ์ป๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๊ธฐ๋ฅ, ํนํ ํจํด ๋งค์นญ ๋ด์ ๊ฐ๋ ์ ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ์๋ฆฌํ ์ดํด๊ฐ ํ์ํฉ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ ํจํด ๋งค์นญ ๊ตฌํ์ด ํํ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋งค์ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํ๋๋ก ๊ฐ๋ ์กฐ๊ฑด ํ๊ฐ๋ฅผ ์ต์ ํํ๋ ์ค์ํ ์ธก๋ฉด์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค.
JavaScript์ ํจํด ๋งค์นญ ๋ฐ ๊ฐ๋ ์ ์ดํด
ํจํด ๋งค์นญ์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํด์ฒดํ๊ณ ํน์ ํจํด๊ณผ ๋น๊ตํ ์ ์๋๋ก ํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ผ๋ก, ์กฐ๊ฑด๋ถ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ณด๋ค ์ ์ธ์ ์ด๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. JavaScript์์๋ Elixir๋ Rust์ ๊ฐ์ ์ธ์ด์ ์ ์ฌํ ์์ ํ ํจํด ๋งค์นญ์ด ์ฌ์ ํ ๋ฑ์ฅํ๊ณ ์์ง๋ง ๊ธฐ์กด ๊ตฌ์กฐ์ ๊ณง ์ถ์๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์๋ฆฌ๋ฅผ ์ ์ฉํ๊ณ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.
์ด ์ปจํ ์คํธ์์ ๊ฐ๋ ์ ์ ํจํด์ด ์ผ์นํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ์ํด ์ถฉ์กฑ๋์ด์ผ ํ๋ ํจํด์ ์ฒจ๋ถ๋ ์กฐ๊ฑด์ ๋๋ค. ๊ฐ๋ ์ ์ ํน์ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ์ฌ ๋จ์ํ ๊ตฌ์กฐ์ ๋งค์นญ์ ๋์ด ๋ณด๋ค ๋ฏธ๋ฌํ ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ํฉ๋๋ค. ๋ค์ ๊ฐ๋ ์ ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
// Conceptual representation
match (data) {
case { type: 'user', status: 'active' } if user.age > 18:
console.log("Active adult user.");
break;
case { type: 'user', status: 'active' }:
console.log("Active user.");
break;
default:
console.log("Other data.");
}
์ด ๊ทธ๋ฆผ์์ if user.age > 18์ ๊ฐ๋ ์ ์
๋๋ค. ์ฒซ ๋ฒ์งธ ์ฌ๋ก๊ฐ ์คํ๋๋ ค๋ฉด ๊ฐ์ฒด์ ๋ชจ์ ๋ฐ ์ํ์ ์ผ์นํ๋ ํจํด ์ธ์๋ true์ฌ์ผ ํ๋ ์ถ๊ฐ ์กฐ๊ฑด์ ์ถ๊ฐํฉ๋๋ค. ์ด ์ ํํ ๊ตฌ๋ฌธ์ด ์์ง ๋ชจ๋ JavaScript ํ๊ฒฝ์์ ์์ ํ ํ์คํ๋์ง๋ ์์์ง๋ง ํจํด๊ณผ ์ ์ฌํ ๊ตฌ์กฐ ๋ด์์ ์กฐ๊ฑด๋ถ ํ๊ฐ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ๋ณดํธ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ ์ฑ๋ฅ ํ๋์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ฑ๋ฅ ๋ณ๋ชฉ ํ์: ์ต์ ํ๋์ง ์์ ์กฐ๊ฑด ํ๊ฐ
ํจํด ๋งค์นญ์ ์ฐ์ํจ์ ๋๋๋ก ๊ธฐ๋ณธ ์ฑ๋ฅ ๋ฌธ์ ์ ์ ๊ฐ๋ฆด ์ ์์ต๋๋ค. ๊ฐ๋ ์ ์ด ๊ด๋ จ๋๋ฉด JavaScript ์์ง์ ์ด๋ฌํ ์กฐ๊ฑด์ ํ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ด ๋ณต์กํ๊ฑฐ๋ ๋ฐ๋ณต์ ์ธ ๊ณ์ฐ์ ํฌํจํ๊ฑฐ๋ ๋ถํ์ํ๊ฒ ํ๊ฐ๋๋ ๊ฒฝ์ฐ ์ค์ํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ํ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ๋ฐ์ ์ธ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ, ๋์ ์ฒ๋ฆฌ๋ ์์ ๋๋ ์ค์๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ๊ทธ๋ ์ต๋๋ค.
์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง๋ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ค๋ณต ๊ณ์ฐ: ๋ค๋ฅธ ๊ฐ๋ ์ ๋ด์์ ๋๋ ๋์ผํ ์ ๋ด์์๋ ๋์ผํ ๊ณ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ํํฉ๋๋ค.
- ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ : ์ผ์น์ ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋ ๊ณผ๋ํ ๊ณ์ฐ, ๋คํธ์ํฌ ์์ฒญ ๋๋ ๋ณต์กํ DOM ์กฐ์์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฐ๋ ์ ์ ๋๋ค.
- ๋นํจ์จ์ ์ธ ๋ก์ง: ๋ ๋น ๋ฅธ ํ๊ฐ๋ฅผ ์ํด ๋จ์ํํ๊ฑฐ๋ ์ฌ์ ๋ ฌํ ์ ์๋ ๊ฐ๋ ๋ด์ ์๋ชป ๊ตฌ์กฐํ๋ ์กฐ๊ฑด๋ฌธ์ ๋๋ค.
- ๋จ๋ฝ ํ๋ก ๋ถ์กฑ: ๋
ผ๋ฆฌ ์ฐ์ฐ์(
&&,||)์์ JavaScript์ ๋ด์ฌ๋ ๋จ๋ฝ ํ๋ก ๋์์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ง ๋ชปํฉ๋๋ค.
๊ฐ๋ ์กฐ๊ฑด ํ๊ฐ ์ต์ ํ๋ฅผ ์ํ ์ ๋ต
์๋ต์ฑ์ด ๋ฐ์ด๋๊ณ ํจ์จ์ ์ธ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์งํ๋ ค๋ฉด ๊ฐ๋ ์กฐ๊ฑด ํ๊ฐ๋ฅผ ์ต์ ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ณ , ์ค๋งํธ ์ฝ๋ฉ ๊ดํ ๋ฐ JavaScript ์์ง์ด ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ์์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
1. ์กฐ๊ฑด์ ์ฐ์ ์์ ์ง์ ๋ฐ ์ฌ์ ๋ ฌ
์กฐ๊ฑด์ด ํ๊ฐ๋๋ ์์๋ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. JavaScript์ ๋
ผ๋ฆฌ ์ฐ์ฐ์(&& ๋ฐ ||)๋ ๋จ๋ฝ ํ๋ก๋ฅผ ํ์ฉํฉ๋๋ค. ์ฆ, && ํํ์์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด false์ด๋ฉด ๋๋จธ์ง ํํ์์ ํ๊ฐ๋์ง ์์ต๋๋ค. ๋ฐ๋๋ก || ํํ์์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด true์ด๋ฉด ๋๋จธ์ง๋ ๊ฑด๋๋๋๋ค.
์์น: && ์ฒด์ธ์์๋ ๊ฐ์ฅ ์ ๋ ดํ๊ณ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์กฐ๊ฑด์ ๋จผ์ ๋ฐฐ์นํ๊ณ || ์ฒด์ธ์์๋ ๊ฐ์ฅ ์ ๋ ดํ๊ณ ์ฑ๊ณตํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์กฐ๊ฑด์ ๋จผ์ ๋ฐฐ์นํฉ๋๋ค.
์:
// Less optimal (potential for expensive check first)
function processData(data) {
if (isComplexUserCheck(data) && data.status === 'active' && data.role === 'admin') {
// ... process admin user
}
}
// More optimal (cheaper, more common checks first)
function processDataOptimized(data) {
if (data.status === 'active' && data.role === 'admin' && isComplexUserCheck(data)) {
// ... process admin user
}
}
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ธฐ๋ฐ์์ ๋ ์์ฃผ ๋ํ๋๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ์ํ ๋๋ ์ญํ ์ ๊ณ ๋ คํ๊ณ ์ด๋ฌํ ๊ฒ์ฌ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ญ์์ค.
2. ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐ ์บ์ฑ
๊ฐ๋ ์กฐ๊ฑด์ด ๋์ผํ ์ ๋ ฅ์ ๋ํด ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ถํ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ํฌํจํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ๋ฅญํ ๊ธฐ์ ์ ๋๋ค. ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ๋์ผํ ์ ๋ ฅ์ด ๋ค์ ๋ฐ์ํ๋ฉด ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์:
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) {
return cache.get(key);
}
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const isLikelyBot = memoize(function(userAgent) {
console.log("Performing expensive bot check...");
// Simulate a complex check, e.g., regex matching against a large list
return /bot|crawl|spider/i.test(userAgent);
});
function handleRequest(request) {
if (isLikelyBot(request.headers['user-agent'])) {
console.log("Blocking potential bot.");
} else {
console.log("Processing legitimate request.");
}
}
handleRequest({ headers: { 'user-agent': 'Googlebot/2.1' } }); // Expensive check runs
handleRequest({ headers: { 'user-agent': 'Mozilla/5.0' } }); // Expensive check skipped (if user-agent is different)
handleRequest({ headers: { 'user-agent': 'Googlebot/2.1' } }); // Expensive check skipped (cached)
์ด๋ ์ฌ์ฉ์ ์์ด์ ํธ ํ์ฑ, ์ง๋ฆฌ์ ์์น ์กฐํ(ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฐ๋ณต์ ์ผ๋ก ์ํ๋๋ ๊ฒฝ์ฐ) ๋๋ ์ ์ฌํ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํด ๋ฐ๋ณต๋ ์ ์๋ ๋ณต์กํ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฐ์ ์์ ๊ณผ ํนํ ๊ด๋ จ์ด ์์ต๋๋ค.
3. ๋ณต์กํ ํํ์ ๋จ์ํ
์ง๋์น๊ฒ ๋ณต์กํ ๋ ผ๋ฆฌ ํํ์์ JavaScript ์์ง์ด ์ต์ ํํ๊ธฐ ์ด๋ ต๊ณ ๊ฐ๋ฐ์๊ฐ ์ฝ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ณต์กํ ์กฐ๊ฑด์ ๋ ์๊ณ ๋ช ๋ช ๋ ๋์ฐ๋ฏธ ํจ์๋ก ๋๋๋ฉด ๋ช ํ์ฑ์ด ํฅ์๋๊ณ ๋์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์:
// Complex and hard to read
if ((user.isActive && user.subscriptionTier !== 'free' && (user.country === 'US' || user.country === 'CA')) || user.isAdmin) {
// ... perform action
}
// Simplified with helper functions
function isPremiumNorthAmericanUser(user) {
return user.isActive && user.subscriptionTier !== 'free' && (user.country === 'US' || user.country === 'CA');
}
function isAuthorizedAdmin(user) {
return user.isAdmin;
}
if (isPremiumNorthAmericanUser(user) || isAuthorizedAdmin(user)) {
// ... perform action
}
๊ตญ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ์ด๋ฌํ ๋์ฐ๋ฏธ ํจ์ ๋ด์์ ๊ตญ๊ฐ ์ฝ๋ ๋๋ ์ง์ญ ์๋ณ์๊ฐ ํ์คํ๋๊ณ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌ๋๋์ง ํ์ธํ์ญ์์ค.
4. ๊ฐ๋์์ ๋ถ์์ฉ ๋ฐฉ์ง
๊ฐ๋ ์ ์ ์ด์์ ์ผ๋ก ์์ ํจ์์ฌ์ผ ํฉ๋๋ค. ์ฆ, ๋ถ์์ฉ์ด ์์ด์ผ ํฉ๋๋ค(์ฆ, ์ธ๋ถ ์ํ๋ฅผ ์์ ํ๊ฑฐ๋ I/O๋ฅผ ์ํํ๊ฑฐ๋ ๊ฐ์ ๋ฐํํ๋ ๊ฒ ์ธ์ ๊ด์ฐฐ ๊ฐ๋ฅํ ์ํธ ์์ฉ์ด ์์ด์ผ ํจ). ๋ถ์์ฉ์ ์์ธกํ ์ ์๋ ๋์์ ์ ๋ฐํ๊ณ ์ฑ๋ฅ ๋ถ์์ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์:
// Bad: Guard modifies external state
let logCounter = 0;
function checkAndIncrement(value) {
if (value > 100) {
logCounter++; // Side effect!
console.log(`High value detected: ${value}. Counter: ${logCounter}`);
return true;
}
return false;
}
if (checkAndIncrement(userData.score)) {
// ... process high score
}
// Good: Guard is pure, side effect handled separately
function isHighScore(score) {
return score > 100;
}
if (isHighScore(userData.score)) {
logCounter++;
console.log(`High value detected: ${userData.score}. Counter: ${logCounter}`);
// ... process high score
}
์์ ํจ์๋ ํ ์คํธ, ์ถ๋ก ๋ฐ ์ต์ ํ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ ์ญ ์ปจํ ์คํธ์์ ์๊ธฐ์น ์์ ์ํ ๋ณ๊ฒฝ์ ํผํ๋ ๊ฒ์ ์์คํ ์์ ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
5. ๋ด์ฅ๋ ์ต์ ํ ํ์ฉ
์ต์ JavaScript ์์ง(V8, SpiderMonkey, JavaScriptCore)์ ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. Just-In-Time(JIT) ์ปดํ์ผ, ์ธ๋ผ์ธ ์บ์ฑ ๋ฐ ์ ํ ์ ๋ฌธํ์ ๊ฐ์ ์ ๊ตํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ดํดํ๋ฉด ์์ง์ด ํจ๊ณผ์ ์ผ๋ก ์ต์ ํํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์์ง ์ต์ ํ๋ฅผ ์ํ ํ:
- ์ผ๊ด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ: ์ผ๊ด๋ ๊ฐ์ฒด ๋ชจ์๊ณผ ๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ง์ ์ ์ฌํ ๋ฐ์ดํฐ ๋ ์ด์์์์ ์ผ๊ด๋๊ฒ ์๋ํ๋ ์ฝ๋๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
eval()๋ฐwith()๋ฐฉ์ง: ์ด๋ฌํ ๊ตฌ๋ฌธ์ ์์ง์ด ์ ์ ๋ถ์ ๋ฐ ์ต์ ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.- ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํํ์๋ณด๋ค ์ ์ธ์ ์ ํธํฉ๋๋ค. ์ข ์ข ์คํ์ผ ๋ฌธ์ ์ด์ง๋ง ๋๋ก๋ ํน์ ์ ์ธ์ด ๋ ์ฝ๊ฒ ์ต์ ํ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋์ผํ ์์๋ก ์์ฑ์ด ์๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด๋๊ฒ ์์ ํ๋ ๊ฒฝ์ฐ ์์ง์ ํด๋น ์์ฑ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ต์ ํํ ์ ์์ต๋๋ค.
6. ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ
ํนํ ์ธ๋ถ ์์ค(API, ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ํจํด ๋งค์นญ์์ ๋ฐ์ดํฐ ์์ฒด์ ์ ํจ์ฑ ๊ฒ์ฌ ๋๋ ๋ณํ์ด ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค๊ฐ ๊ฐ๋์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ ํจ์จ์ ์ด์ด์ผ ํฉ๋๋ค.
์: ๊ตญ์ ํ(i18n) ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ
// Assume we have an i18n service that can format currency
const currencyFormatter = new Intl.NumberFormat(navigator.language, { style: 'currency', currency: 'USD' });
function isWithinBudget(amount, budget) {
// Avoid reformatting if possible, compare raw numbers
return amount <= budget;
}
function processTransaction(transaction) {
const userLocale = transaction.user.locale || 'en-US';
const budget = 1000;
// Using optimized condition
if (transaction.amount <= budget) {
console.log(`Transaction of ${transaction.amount} is within budget.`);
// Perform further processing...
// Formatting for display is a separate concern and can be done after checks
const formattedAmount = new Intl.NumberFormat(userLocale, { style: 'currency', currency: transaction.currency }).format(transaction.amount);
console.log(`Formatted amount for ${userLocale}: ${formattedAmount}`);
} else {
console.log(`Transaction of ${transaction.amount} exceeds budget.`);
}
}
processTransaction({ amount: 950, currency: 'EUR', user: { locale: 'fr-FR' } });
processTransaction({ amount: 1200, currency: 'USD', user: { locale: 'en-US' } });
์ฌ๊ธฐ์ transaction.amount <= budget ๊ฒ์ฌ๋ ์ง์ ์ ์ด๊ณ ๋น ๋ฆ
๋๋ค. ๋ก์บ๋ณ ๊ท์น๊ณผ ๊ด๋ จ๋ ์ ์๊ณ ๊ณ์ฐ์ ์ผ๋ก ๋ ์ง์ฝ์ ์ธ ํตํ ํ์ ์ง์ ์ ํ์ ๊ฐ๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ํ์๊น์ง ์ง์ฐ๋ฉ๋๋ค.
7. ํฅํ JavaScript ๊ธฐ๋ฅ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ ๊ณ ๋ ค
JavaScript๊ฐ ์งํํจ์ ๋ฐ๋ผ ํจํด ๋งค์นญ์ ์ํ ์๋ก์ด ๊ธฐ๋ฅ์ด ๋์ ๋ ์ ์์ต๋๋ค. ์ ์ ๋ฐ ํ์คํ(์: TC39์ ์คํ ์ด์ง 3 ์ ์)์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด ์ฑ๋ฅ ํน์ฑ์ ๋ถ์ํ์ญ์์ค. ์ด๊ธฐ ์ฑํ์๋ ์ด๋ฌํ ์๋ก์ด ๊ตฌ๋ฌธ์ ์ฒ์๋ถํฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํจ์ผ๋ก์จ ์ฐ์๋ฅผ ์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํฅํ ํจํด ๋งค์นญ ๊ตฌ๋ฌธ์ด ์ผ์น ๋ด์์ ๋ ์ง์ ์ ์ธ ์กฐ๊ฑด๋ถ ํํ์์ ํ์ฉํ๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ์คํ์๋ ์ฌ์ ํ ์กฐ๊ฑด ํ๊ฐ๊ฐ ํฌํจ๋๋ฉฐ ์ฌ๊ธฐ์์ ๋ ผ์๋ ์ต์ ํ ์์น์ ์ฌ์ ํ ๊ด๋ จ๋ฉ๋๋ค.
์ฑ๋ฅ ๋ถ์์ ์ํ ๋๊ตฌ ๋ฐ ๊ธฐ์
๊ฐ๋ ์กฐ๊ฑด์ ์ต์ ํํ๊ธฐ ์ ํ์ ๊ทธ ์ํฅ์ ์ธก์ ํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. JavaScript๋ ์ฑ๋ฅ ํ๋กํ์ผ๋ง์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ(์ฑ๋ฅ ํญ): Chrome, Firefox ๋ฐ ๊ธฐํ ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ ํญ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๊ธฐ๋กํ๊ณ CPU ์ง์ฝ์ ์ธ ํจ์ ๋ฐ ๋ณ๋ชฉ ํ์์ ์๋ณํ ์ ์์ต๋๋ค. ์กฐ๊ฑด๋ถ ๋ก์ง๊ณผ ๊ด๋ จ๋ ์ฅ๊ธฐ ์คํ ์์ ์ ์ฐพ์ผ์ญ์์ค.
console.time()๋ฐconsole.timeEnd(): ๊ฐ๋จํ์ง๋ง ํน์ ์ฝ๋ ๋ธ๋ก์ ์ง์ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.- Node.js ํ๋กํ์ผ๋ฌ: ๋ฐฑ์๋ JavaScript์ ๊ฒฝ์ฐ Node.js๋ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ์ ์ฌํ๊ฒ ์๋ํ๋ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฒค์น๋งํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Benchmark.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํต์ ๋ ์กฐ๊ฑด์์ ์ฑ๋ฅ์ ๋น๊ตํ๊ธฐ ์ํด ์์ ์ฝ๋ ์ค๋ํซ์ ๋ํ ํต๊ณ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๋ฒค์น๋งํฌ๋ฅผ ์ํํ ๋๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ํ ํ์ค์ ์ธ ์๋๋ฆฌ์ค๋ฅผ ๋ฐ์ํ๋์ง ํ์ธํ์ญ์์ค. ์ฌ๊ธฐ์๋ ๋ค์ํ ์ง์ญ์์ ์ผ๋ฐ์ ์ธ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด, ์ฅ์น ๊ธฐ๋ฅ ๋๋ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
JavaScript ์ฑ๋ฅ์ ๋ํ ๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ
ํนํ ํจํด ๋งค์นญ์์ ๊ฐ๋ ์ ์ ๋ํ JavaScript ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ ๊ธ๋ก๋ฒ ์ฐจ์์ ๊ฐ์ต๋๋ค.
- ๋ค์ํ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ: ์ธ๋ถ ๋ฐ์ดํฐ ๋๋ ๋ณต์กํ ํด๋ผ์ด์ธํธ ์ธก ๊ณ์ฐ์ ์์กดํ๋ ์ฝ๋๋ ๋๊ธฐ ์๊ฐ์ด ๋ ๋์ ์ง์ญ์์ ๋ค๋ฅด๊ฒ ์ํ๋ ์ ์์ต๋๋ค. ๋น ๋ฅด๊ณ ๋ก์ปฌ ๊ฒ์ฌ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ฅ์น ๊ธฐ๋ฅ: ์ธ๊ณ ์ฌ๋ฌ ์ง์ญ์ ์ฌ์ฉ์๋ ๊ณ ๊ธ ๋ฐ์คํฌํฑ์์ ์ ์ ๋ ฅ ํด๋ํฐ์ ์ด๋ฅด๊ธฐ๊น์ง ๊ด๋ฒ์ํ ์ฅ์น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. CPU ๋ก๋๋ฅผ ์ค์ด๋ ์ต์ ํ๋ ๋ชจ๋ ์ฌ์ฉ์, ํนํ ์ฑ๋ฅ์ด ๋ฎ์ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ์ ์ตํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ณผ๋ฅจ ๋ฐ ๋ฐฐํฌ: ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ค์ํ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ช ๊ฐ์ ๋ ์ฝ๋์ด๋ ์๋ฐฑ๋ง ๊ฐ์ ๋ ์ฝ๋์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํํฐ๋งํ๊ฑฐ๋ ์ฒ๋ฆฌํ ์ ์๋ ํจ์จ์ ์ธ ๊ฐ๋๊ฐ ํ์์ ์ ๋๋ค.
- ์๊ฐ๋ ๋ฐ ํ์งํ: ์ฝ๋ ์คํ ์๋์ ์ง์ ์ ์ธ ๊ด๋ จ์ ์์ง๋ง ๊ฐ๋ ๋ด์ ์๊ฐ์ ๋๋ ๋ก์บ๋ณ ์กฐ๊ฑด์ด ๋ค์ํ ์๊ฐ๋ ๋ฐ ์ธ์ด์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋์ง ํ์ธํ๋ ๊ฒ์ ๊ธฐ๋ฅ์ ์ ํ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ฒฐ๋ก
JavaScript์ ํจํด ๋งค์นญ์ ํนํ ๊ฐ๋ ์ ์ ํํ๋ ฅ์ ํตํด ๋ณต์กํ ๋ก์ง์ ๊ด๋ฆฌํ๋ ์ ๊ตํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ฅ์ ์กฐ๊ฑด ํ๊ฐ์ ํจ์จ์ฑ์ ๋ฌ๋ ค ์์ต๋๋ค. ์กฐ๊ฑด์ ์ฐ์ ์์ ์ง์ ๋ฐ ์ฌ์ ๋ ฌ, ๋ฉ๋ชจ์ด์ ์ด์ ์ฌ์ฉ, ๋ณต์กํ ํํ์ ๋จ์ํ, ๋ถ์์ฉ ๋ฐฉ์ง ๋ฐ ์์ง ์ต์ ํ ์ดํด์ ๊ฐ์ ์ ๋ต์ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ํจํด ๋งค์นญ ๊ตฌํ์ด ์ฐ์ํ๊ณ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํ๋๋ก ํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์ฌ์ฉ์์๊ฒ๋ ์ด๋ฌํ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ด ์ฆํญ๋ฉ๋๋ค. ๊ฐ๋ ฅํ ๊ฐ๋ฐ ๋จธ์ ์์๋ ๋ฌด์ํ ์ ์๋ ๊ฒ์ด ๋ค๋ฅธ ๋คํธ์ํฌ ์กฐ๊ฑด์ด๋ ์ฑ๋ฅ์ด ๋ฎ์ ์ฅ์น์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ฑ๋ฅ ์ฐ์ ์ฌ๊ณ ๋ฐฉ์์ ์ฑํํ๊ณ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํจ๊ณผ์ ์ผ๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์๋ต์ฑ์ด ๋ฐ์ด๋ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ต์ ํ ๊ธฐ์ ์ ์์ฉํ์ฌ ๋ ๊นจ๋ํ JavaScript๋ฅผ ์์ฑํ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ด๋์ ์๋ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ญ์์ค.