๐ JavaScript ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฒ: ์ฝ๋๋ฅผ ๋ ๊ฐ ๋ฌ์์ฃผ๋ ๋ง๋ฒ โจ

์๋ ํ์ธ์, ์ฝ๋ฉ ๋ง๋ฒ์ฌ ์ฌ๋ฌ๋ถ! ์ค๋์ JavaScript ์ธ๊ณ์์ ๊ฐ์ฅ ํซํ ์ฃผ์ , ๋ฐ๋ก "๋ฆฌํฉํ ๋ง"์ ๋ํด ๊น์ด ํํค์ณ๋ณผ ๊ฑฐ์์. ์ฝ๋๋ฅผ ๋ ๋ฉ์ง๊ณ , ๋ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๋น๋ฐ ๋ ์ํผ, ํจ๊ป ์์๋ณผ๊น์? ๐งโโ๏ธโจ
๋ฆฌํฉํ ๋ง์ด ๋ญ๋๊ณ ์? ๊ฐ๋จํ ๋งํด์, ์ด๋ฏธ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ ์ข๊ฒ ๋ง๋๋ ๊ณผ์ ์ด์์. ๋ง์น ์ฌ๋ฌ๋ถ์ ๋ฐฉ์ ์ ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ์! ๊ทผ๋ฐ ์ด๊ฒ ์ ์ค์ํ ๊น์? ๐ค
๋ฆฌํฉํ ๋ง์ ์ค์์ฑ:
- ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ ๐
- ์ ์ง๋ณด์ ์ฉ์ด์ฑ ๐ ๏ธ
- ๋ฒ๊ทธ ๋ฐ๊ฒฌ ๋ฐ ์์ ์ฌ์์ง ๐
- ์ฑ๋ฅ ๊ฐ์ ๊ฐ๋ฅ์ฑ ๐
- ํ ํ์ ํจ์จ์ฑ ์ฆ๊ฐ ๐ค
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก JavaScript ๋ฆฌํฉํ ๋ง์ ์ธ๊ณ๋ก ๋ค์ด๊ฐ๋ณผ๊น์? ์ค๋น๋์ จ๋์? Let's go! ๐โโ๏ธ๐จ
1. ๋ณ์ ๋ฆฌํฉํ ๋ง: ์ด๋ฆ์ด ๋ฐ์ด๋ค! ๐ท๏ธ
๋ณ์ ์ด๋ฆ ์ง๊ธฐ, ์ฌ๋ฌ๋ถ๋ ๊ณ ๋ฏผ ๋ง์ด ํ์์ฃ ? "a", "b", "temp" ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ณ์ ๋ง๋ค์๋ค๊ฐ ๋์ค์ ๋ญ๊ฐ ๋ญ์ง ํท๊ฐ๋ฆฐ ์ ์๋์? ใ ใ ใ ๊ทธ๋์ ์ฒซ ๋ฒ์งธ๋ก ๋ณ์ ์ด๋ฆ ์ ๋๋ก ์ง๋ ๋ฒ์ ๋ํด ์์๋ณผ๊ฒ์!
๋ณ์ ์ด๋ฆ ์ง๊ธฐ ํ:
- ์๋ฏธ ์๊ณ ๋ช ํํ ์ด๋ฆ ์ฌ์ฉํ๊ธฐ
- ๋๋ฌด ์งง์ง๋, ๋๋ฌด ๊ธธ์ง๋ ์๊ฒ
- ์นด๋ฉ ์ผ์ด์ค(camelCase) ์ฌ์ฉํ๊ธฐ
- ์ฝ์ด ํผํ๊ธฐ (๋จ, ๋๋ฆฌ ์๋ ค์ง ์ฝ์ด๋ OK)
์๋ฅผ ๋ค์ด๋ณผ๊น์? ๐ค
// Before ๋ฆฌํฉํ ๋ง
let a = 5;
let b = 10;
let res = a + b;
// After ๋ฆฌํฉํ ๋ง
let firstNumber = 5;
let secondNumber = 10;
let sum = firstNumber + secondNumber;
์ด๋์? ํจ์ฌ ์ฝ๊ธฐ ์ฝ์ฃ ? ์ด๋ ๊ฒ ๋ณ์ ์ด๋ฆ๋ง ์ ๋๋ก ์ง์ด๋ ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด ๋ณด์ฌ์!
๋ณ์ ์ด๋ฆ์ ์ ์ง๋ ๊ฒ์ ์ฝ๋์ ์์ฒด ๋ฌธ์ํ(self-documenting)๋ฅผ ๋๋ ์ฒซ ๊ฑธ์์ด์์.
๊ทธ๋ฐ๋ฐ ๋ง์ด์ฃ , ๋ณ์ ์ด๋ฆ ์ง๊ธฐ์ ๋๋ฌด ์๊ฐ ์ฐ๋ค ๋ณด๋ฉด ์ค์ ์ฝ๋ฉํ ์๊ฐ์ด ๋ถ์กฑํ ์ ์์ด์. ๊ทธ๋์ ์ฌ๋ฅ๋ท(https://www.jaenung.net)๊ฐ์ ํ๋ซํผ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์ฝ๋ ๋ค์ด๋ฐ ์ผ์ค๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์. ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ "์ค, ์ด ๋ณ์ ์ด๋ฆ ์ผ์ค ์๋ค?"ํ๊ณ ๋ฐฐ์ธ ์ ์ด ๋ง๊ฑฐ๋ ์. ๐
์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํ์คํ ์ฐจ์ด๊ฐ ๋๊ปด์ง์ฃ ? ์ค๋ฅธ์ชฝ์ ๋ฆฌํฉํ ๋ง๋ ์ฝ๋๊ฐ ํจ์ฌ ์ดํดํ๊ธฐ ์ฌ์ ๋ณด์ด๋ค์. ์ด๊ฒ ๋ฐ๋ก ์ข์ ๋ณ์ ์ด๋ฆ์ ํ์ด์์! ๐
ํ์ง๋ง ์ฃผ์ํ ์ ๋ ์์ด์. ๋๋ฌด ๊ธธ๊ณ ๋ณต์กํ ์ด๋ฆ์ ์คํ๋ ค ๊ฐ๋
์ฑ์ ํด์น ์ ์์ด์. ์๋ฅผ ๋ค์ด theNumberThatWeWillUseToAddWithTheSecondNumber
์ด๋ฐ ์์ผ๋ก ์ง๋ ๊ฑด ์ข ๊ณผํด์. ใ
ใ
ใ
์ ๋นํ, ๊ทธ๋ฆฌ๊ณ ๋ช
ํํ๊ฒ! ์ด๊ฒ ํฌ์ธํธ์์.
์, ์ด์ ๋ณ์ ์ด๋ฆ ์ง๊ธฐ์ ๊ธฐ๋ณธ์ ์์์ผ๋, ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ณผ๊น์? ํจ์ ๋ฆฌํฉํ ๋ง! ์ด๊ฒ๋ ์์ฒญ ์ค์ํ๋ต๋๋ค. ๊ฐ์ฆ์~! ๐
2. ํจ์ ๋ฆฌํฉํ ๋ง: ์๊ณ ๊ท์ฌ์ด ๊ฒ ์ต๊ณ ! ๐ฃ
ํจ์, ์ฌ๋ฌ๋ถ์ ์ฝ๋์์ ์ผ๊พผ ์ญํ ์ ํ๋ ๋ ์๋ค์ด์ฃ . ๊ทผ๋ฐ ์ด ์ผ๊พผ๋ค์ด ๋๋ฌด ๋ง์ ์ผ์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๊ทธ๋ ์ฃ , ๊ณผ๋ก์ฌ์ ์ํ์ด ์์ด์! ใ ใ ใ ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ์๊ณ ๊ท์ฝ๊ฒ ๋ง๋ค์ด์ผ ํด์. ํ ๊ฐ์ง ์ผ๋ง ์ํ๋ ํจ์, ๊ทธ๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ์ ๋ชฉํ์์! ๐จโ๐ณ๐ฉโ๐ณ
ํจ์ ๋ฆฌํฉํ ๋ง ์์น:
- ๋จ์ผ ์ฑ ์ ์์น (SRP: Single Responsibility Principle) ์งํค๊ธฐ
- ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง ํด์ผ ํด์
- ํจ์ ์ด๋ฆ์ ๊ทธ ๊ธฐ๋ฅ์ ์ ํํ ์ค๋ช ํด์ผ ํด์
- ๋งค๊ฐ๋ณ์๋ ์ ์์๋ก ์ข์์ (3๊ฐ ์ดํ๊ฐ ์ด์์ )
- ํจ์ ๋ณธ๋ฌธ์ ์งง๊ณ ๊ฐ๊ฒฐํ๊ฒ!
์, ์ด์ ์์ ๋ฅผ ํตํด ํจ์ ๋ฆฌํฉํ ๋ง์ ํด๋ณผ๊น์? ๐ง
// Before ๋ฆฌํฉํ ๋ง
function processUserData(name, age, email) {
console.log("Processing user data...");
if (name.length > 0 && age > 0 && email.includes('@')) {
const userInfo = `Name: ${name}, Age: ${age}, Email: ${email}`;
console.log(userInfo);
// ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๋ก์ง์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด์
console.log("User data saved to database");
return true;
} else {
console.log("Invalid user data");
return false;
}
}
// After ๋ฆฌํฉํ ๋ง
function validateUserData(name, age, email) {
return name.length > 0 && age > 0 && email.includes('@');
}
function formatUserInfo(name, age, email) {
return `Name: ${name}, Age: ${age}, Email: ${email}`;
}
function saveUserToDatabase(userInfo) {
// ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ๋ก์ง
console.log("User data saved to database");
return true;
}
function processUserData(name, age, email) {
console.log("Processing user data...");
if (!validateUserData(name, age, email)) {
console.log("Invalid user data");
return false;
}
const userInfo = formatUserInfo(name, age, email);
console.log(userInfo);
return saveUserToDatabase(userInfo);
}
์ด๋ค๊ฐ์? ๋ฆฌํฉํ ๋ง ํ์ ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ฃ ? ๊ฐ ํจ์๊ฐ ํ๋์ ์ญํ ๋ง ๋ด๋นํ๊ณ ์์ด์. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๋ ๋์์ง๊ณ , ํ ์คํธํ๊ธฐ๋ ์ฌ์์ ธ์! ๐
ํจ์๋ฅผ ์๊ฒ ๋๋๋ฉด, ๋ง์น ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ์กฐ๋ฆฝํด์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์์ด์. ์ด๊ฒ ๋ฐ๋ก ๋ชจ๋ํ์ ํ์ด์ฃ !
์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํจ์ ๋ฆฌํฉํ ๋ง์ ํจ๊ณผ๊ฐ ํ๋์ ๋ณด์ด์ฃ ? ์ผ์ชฝ์ ํฐ ํจ์๊ฐ ์ค๋ฅธ์ชฝ์์๋ ์๊ณ ๊ท์ฌ์ด ํจ์๋ค๋ก ๋๋์ด์ก์ด์. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ํจ์์ ์ญํ ์ด ๋ช ํํด์ง๊ณ , ์ฝ๋ ๊ด๋ฆฌ๋ ํจ์ฌ ์ฌ์์ ธ์! ๐
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ ๊น! ํจ์๋ฅผ ๋๋ฌด ์๊ฒ ๋๋๋ค ๋ณด๋ฉด ์คํ๋ ค ๋ณต์กํด์ง ์ ์์ด์. balance๊ฐ ์ค์ํด์. ๋๋ฌด ์ชผ๊ฐ์ง ๋ง๊ณ , ์ ๋นํ! ์ด๊ฒ ๋ฐ๋ก ๋ฆฌํฉํ ๋ง์ ๋ฌ๋ฏธ์ฃ . ๐ญ
ํจ์ ๋ฆฌํฉํ ๋ง, ์ด๋ ต์ง ์์ฃ ? ์ด๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ค ๋ณด๋ฉด ์ด๋์ ์ฌ๋ฌ๋ถ๋ JavaScript ๊ณ ์๊ฐ ๋์ด ์์ ๊ฑฐ์์. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์ค๋ ฅ์ ์๋ค ๋ณด๋ฉด, ์ฌ๋ฅ๋ท ๊ฐ์ ํ๋ซํผ์์ ์ฌ๋ฌ๋ถ์ ์ฝ๋ฉ ์ค๋ ฅ์ ๋ฝ๋ผ ์ ์๊ฒ ์ฃ ? ๋๊ตฐ๊ฐ์๊ฒ JavaScript ๋ฆฌํฉํ ๋ง์ ๊ฐ๋ฅด์ณ์ฃผ๋ ๋ฉํ ๊ฐ ๋ ์๋ ์๊ณ ์! ๐
์, ์ด์ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ ์ค๋น ๋์ จ๋์? ๋ค์์ ์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง์ด์์. ๋ณต์กํ if-else ๋ฌธ์ ์ด๋ป๊ฒ ๋ ๊น๋ํ๊ฒ ๋ง๋ค ์ ์๋์ง ์์๋ณผ ๊ฑฐ์์. ์ค๋น๋์ จ์ฃ ? Let's go! ๐
3. ์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง: if-else ์ง์ฅ์์ ํ์ถํ๊ธฐ! ๐โโ๏ธ๐จ
์ฌ๋ฌ๋ถ, ํน์ ์ด๋ฐ ๊ฒฝํ ์์ผ์ ๊ฐ์? if๋ฌธ ์์ if๋ฌธ, ๊ทธ ์์ ๋ if๋ฌธ... ๐ ๋ง์น ๋ฌ์์ ์ธํ ๋งํธ๋ฃ์์นด์ฒ๋ผ ๊ณ์ ์ด์ด๋ด๋ ๋์ด ์๋ ๊ทธ๋ฐ ์ฝ๋ ๋ง์ด์์. ์ด๋ฐ ๊ฑธ ์ฐ๋ฆฌ๋ "if-else ์ง์ฅ"์ด๋ผ๊ณ ๋ถ๋ฅด์ฃ . ใ ใ ใ ์ค๋์ ์ด ์ง์ฅ์์ ํ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฑฐ์์!
์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง ์ ๋ต:
- Early Return ์ฌ์ฉํ๊ธฐ
- ์ผํญ ์ฐ์ฐ์ ํ์ฉํ๊ธฐ
- Switch ๋ฌธ ์ฌ์ฉํ๊ธฐ
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ฌ์ฉํ๊ธฐ
- ๋ฐฐ์ด ๋ฉ์๋ ํ์ฉํ๊ธฐ
์, ์ด์ ๊ฐ๊ฐ์ ์ ๋ต์ ์์ ์ ํจ๊ป ์ดํด๋ณผ๊น์? ๐ต๏ธโโ๏ธ
1) Early Return ์ฌ์ฉํ๊ธฐ
// Before
function processOrder(order) {
if (order.isValid) {
if (order.hasStock) {
if (order.paymentComplete) {
// ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
return "์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋ฃ";
} else {
return "๊ฒฐ์ ์ค๋ฅ";
}
} else {
return "์ฌ๊ณ ๋ถ์กฑ";
}
} else {
return "์ ํจํ์ง ์์ ์ฃผ๋ฌธ";
}
}
// After
function processOrder(order) {
if (!order.isValid) return "์ ํจํ์ง ์์ ์ฃผ๋ฌธ";
if (!order.hasStock) return "์ฌ๊ณ ๋ถ์กฑ";
if (!order.paymentComplete) return "๊ฒฐ์ ์ค๋ฅ";
// ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
return "์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋ฃ";
}
์ด๋์? Early Return์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด์ง๊ณ ์ฝ๊ธฐ ์ฌ์์ง์ฃ ? ๋ง์น ๋ฌธ์ง๊ธฐ๊ฐ ์ ๊ตฌ์์ ์กฐ๊ฑด์ ์ฒดํฌํ๋ ๊ฒ์ฒ๋ผ์! ๐ฎโโ๏ธ
2) ์ผํญ ์ฐ์ฐ์ ํ์ฉํ๊ธฐ
// Before
let message;
if (isLoggedIn) {
message = "ํ์ํฉ๋๋ค!";
} else {
message = "๋ก๊ทธ์ธํด์ฃผ์ธ์.";
}
// After
let message = isLoggedIn ? "ํ์ํฉ๋๋ค!" : "๋ก๊ทธ์ธํด์ฃผ์ธ์.";
์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ ์กฐ๊ฑด๋ฌธ์ ํ ์ค๋ก ์ค์ผ ์ ์์ด์. ํ์ง๋ง ์ฃผ์! ๋๋ฌด ๋ณต์กํ ์กฐ๊ฑด์๋ ์ฌ์ฉํ์ง ๋ง์ธ์. ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ด์. ๐
3) Switch ๋ฌธ ์ฌ์ฉํ๊ธฐ
// Before
function getDayName(dayNumber) {
if (dayNumber === 1) return "์์์ผ";
else if (dayNumber === 2) return "ํ์์ผ";
else if (dayNumber === 3) return "์์์ผ";
else if (dayNumber === 4) return "๋ชฉ์์ผ";
else if (dayNumber === 5) return "๊ธ์์ผ";
else if (dayNumber === 6) return "ํ ์์ผ";
else if (dayNumber === 7) return "์ผ์์ผ";
else return "์๋ชป๋ ์
๋ ฅ";
}
// After
function getDayName(dayNumber) {
switch (dayNumber) {
case 1: return "์์์ผ";
case 2: return "ํ์์ผ";
case 3: return "์์์ผ";
case 4: return "๋ชฉ์์ผ";
case 5: return "๊ธ์์ผ";
case 6: return "ํ ์์ผ";
case 7: return "์ผ์์ผ";
default: return "์๋ชป๋ ์
๋ ฅ";
}
}
switch๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ if-else๋ฌธ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์์ด์. ํนํ ํน์ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ํด์ผ ํ ๋ ์ ์ฉํ์ฃ ! ๐
4) ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ฌ์ฉํ๊ธฐ
// Before
function getDayName(dayNumber) {
switch (dayNumber) {
case 1: return "์์์ผ";
case 2: return "ํ์์ผ";
case 3: return "์์์ผ";
case 4: return "๋ชฉ์์ผ";
case 5: return "๊ธ์์ผ";
case 6: return "ํ ์์ผ";
case 7: return "์ผ์์ผ";
default: return "์๋ชป๋ ์
๋ ฅ";
}
}
// After
const dayNames = {
1: "์์์ผ",
2: "ํ์์ผ",
3: "์์์ผ",
4: "๋ชฉ์์ผ",
5: "๊ธ์์ผ",
6: "ํ ์์ผ",
7: "์ผ์์ผ"
};
function getDayName(dayNumber) {
return dayNames[dayNumber] || "์๋ชป๋ ์
๋ ฅ";
}
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด switch๋ฌธ๋ณด๋ค ๋ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์. ๋ง์น ์ฌ์ ์์ ๋จ์ด๋ฅผ ์ฐพ๋ ๊ฒ์ฒ๋ผ ๋น ๋ฅด๊ณ ์ง๊ด์ ์ด์ฃ ! ๐
5) ๋ฐฐ์ด ๋ฉ์๋ ํ์ฉํ๊ธฐ
// Before
function getAdults(people) {
const adults = [];
for (let i = 0; i < people.length; i++) {
if (people[i].age >= 18) {
adults.push(people[i]);
}
}
return adults;
}
// After
function getAdults(people) {
return people.filter(person => person.age >= 18);
}
๋ฐฐ์ด ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋ณต์กํ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์. ์ฝ๋๊ฐ ๋ ์ ์ธ์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง์ฃ ! ๐จโ๐ฉโ๐งโ๐ฆ
์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง์ ํต์ฌ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ข๊ฒ ๋ง๋๋ ๊ฑฐ์์. ํญ์ ๊ฐ๋ ์ฑ์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ์ธ์!
์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง์ ํจ๊ณผ๊ฐ ํ์คํ ๋ณด์ด์ฃ ? ์ผ์ชฝ์ ๋ณต์กํ ์ค์ฒฉ if๋ฌธ์ด ์ค๋ฅธ์ชฝ์์๋ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋์์ด์. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ํ๋ฆ์ ํจ์ฌ ์ฝ๊ฒ ์ดํดํ ์ ์์ด์! ๐
์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง, ์๊ฐ๋ณด๋ค ์ด๋ ต์ง ์์ฃ ? ์ด๋ฐ ๊ธฐ์ ๋ค์ ์ตํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ์ ์ ๋ ๊น๋ํด์ง๊ณ ํจ์จ์ ์ผ๋ก ๋ณํ ๊ฑฐ์์. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์ค๋ ฅ์ ์ฌ๋ฅ๋ท ๊ฐ์ ํ๋ซํผ์์ ํฐ ๊ฐ์น๋ฅผ ๋ฐํํ ์ ์์ด์. ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฒ์ ๊ฐ๋ฅด์น๋ ๋ฉํ ๊ฐ ๋ ์๋ ์๊ณ , ํด๋ฆฐ ์ฝ๋ ์์ฑ ๋ฅ๋ ฅ์ผ๋ก ๋์ ํ๊ฐ๋ฅผ ๋ฐ์ ์๋ ์์ฃ ! ๐
์, ์ด์ ์ฐ๋ฆฌ์ JavaScript ๋ฆฌํฉํ ๋ง ์ฌํ์ด ๊ฑฐ์ ๋๋๊ฐ๊ณ ์์ด์. ๋ง์ง๋ง์ผ๋ก ํ ๊ฐ์ง ๋ ์ค์ํ ์ฃผ์ ๋ฅผ ๋ค๋ค๋ณผ๊น์? ๋ฐ๋ก '๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง'์ด์์. ํจ์จ์ ์ธ ๋ฐ๋ณต๋ฌธ ์์ฑ์ ์ฝ๋์ ์ฑ๋ฅ๊ณผ ๊ฐ๋ ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น์ฃ . ์ค๋น๋์ จ๋์? Let's dive in! ๐โโ๏ธ
4. ๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง: ๋ ์ฐ์ํ๊ฒ, ๋ ํจ์จ์ ์ผ๋ก! ๐โจ
๋ฐ๋ณต๋ฌธ, ํ๋ก๊ทธ๋๋ฐ์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์์ฃ . ํ์ง๋ง ์๋ชป ์ฌ์ฉํ๋ฉด ๊ฐ์๊ฐ ๋ ์๋ ์์ด์. ๐ ์ค๋์ ๋ฐ๋ณต๋ฌธ์ ๋ ์ฐ์ํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฑฐ์์. ์ค๋น๋์ จ๋์? ๐
๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง ์ ๋ต:
- for...of ๋ฃจํ ์ฌ์ฉํ๊ธฐ
- ๋ฐฐ์ด ๋ฉ์๋ ํ์ฉํ๊ธฐ (map, filter, reduce)
- break์ continue ์ ์ ํ ์ฌ์ฉํ๊ธฐ
- ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ ํผํ๊ธฐ
- ๋ฐ๋ณต๋ฌธ ๋ด๋ถ ๋ก์ง ํจ์๋ก ์ถ์ถํ๊ธฐ
์, ์ด์ ๊ฐ๊ฐ์ ์ ๋ต์ ์์ ์ ํจ๊ป ์ดํด๋ณผ๊น์? ๐ต๏ธโโ๏ธ
1) for...of ๋ฃจํ ์ฌ์ฉํ๊ธฐ
// Before
const fruits = ['apple', 'banana', 'orange'];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
// After
const fruits = ['apple', 'banana', 'orange'];
for (const fruit of fruits) {
console.log(fruit);
}
for...of ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ง๊ณ ์ฝ๊ธฐ ์ฌ์์ ธ์. ์ธ๋ฑ์ค๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋๊น ์ค์ํ ํ๋ฅ ๋ ์ค์ด๋ค์ฃ ! ๐๐๐
2) ๋ฐฐ์ด ๋ฉ์๋ ํ์ฉํ๊ธฐ
// Before
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = [];
for (let i = 0; i < numbers.length; i++) {
doubledNumbers.push(numbers[i] * 2);
}
// After
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(num => num * 2);
๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋ ์ ์ธ์ ์ด ๋๊ณ , ์๋๋ฅผ ๋ช ํํ ํํํ ์ ์์ด์. ๊ฒ๋ค๊ฐ ์ฑ๋ฅ๋ ์ข์์ง ์ ์์ฃ ! ๐
3) break์ continue ์ ์ ํ ์ฌ์ฉํ๊ธฐ
// Before
function findFirstEven(numbers) {
let result;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
result = numbers[i];
break;
}
}
return result;
}
// After
function findFirstEven(numbers) {
for (const num of numbers) {
if (num % 2 === 0) return num;
}
}
break์ continue๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ ๋ฐ๋ณต์ ์ค์ด๊ณ ์ฝ๋ ํจ์จ์ฑ์ ๋์ผ ์ ์์ด์. ํ์ง๋ง ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ฉด ์ฝ๋ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ด๋ ค์์ง ์ ์์ผ๋ ์ฃผ์ํด์ผ ํด์! โ ๏ธ
4) ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ ํผํ๊ธฐ
// Before
function multiplyArrays(arr1, arr2) {
const result = [];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
result.push(arr1[i] * arr2[j]);
}
}
return result;
}
// After
function multiplyArrays(arr1, arr2) {
return arr1.flatMap(x => arr2.map(y => x * y));
}
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ด์. ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ํ์ฉํด ์ค์ฒฉ์ ํผํ๋ ๊ฒ์ด ์ข์์. ์ฝ๋๋ ๋ ๊น๋ํด์ง๊ณ ์! ๐
5) ๋ฐ๋ณต๋ฌธ ๋ด๋ถ ๋ก์ง ํจ์๋ก ์ถ์ถํ๊ธฐ
// Before
const users = [/* ์ฌ์ฉ์ ๋ฐ์ดํฐ */];
for (const user of users) {
if (user.age >= 18) {
if (user.subscription === 'premium') {
// ๋ณต์กํ ๋ก์ง
console.log(`ํ๋ฆฌ๋ฏธ์ ํํ: ${user.name}`);
} else {
console.log(`์ผ๋ฐ ํํ: ${user.name}`);
}
}
}
// After
function processUser(user) {
if (user.age < 18) return;
const benefit = user.subscription === 'premium' ? 'ํ๋ฆฌ๋ฏธ์ ํํ' : '์ผ๋ฐ ํํ';
console.log(`${benefit}: ${user.name}`);
}
const users = [/* ์ฌ์ฉ์ ๋ฐ์ดํฐ */];
users.forEach(processUser);
๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ ๋ณต์กํ ๋ก์ง์ ๋ณ๋์ ํจ์๋ก ์ถ์ถํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ ธ์. ๊ฐ ๋ถ๋ถ์ ์ญํ ์ด ๋ช ํํด์ง์ฃ ! ๐จโ๐ป๐ฉโ๐ป
๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง์ ํต์ฌ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ณ , ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๊ฑฐ์์. ํญ์ ์ฑ๋ฅ๊ณผ ๊ฐ๋ ์ฑ์ ๊ท ํ์ ๊ณ ๋ คํ์ธ์!
์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง์ ํจ๊ณผ๊ฐ ํ๋์ ๋ณด์ด์ฃ ? ์ผ์ชฝ์ ๋ณต์กํ for ๋ฃจํ๊ฐ ์ค๋ฅธ์ชฝ์์๋ ๊น๋ํ ํจ์์ forEach ๋ฉ์๋๋ก ์ ๋ฆฌ๋์์ด์. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ์๋๋ฅผ ํจ์ฌ ์ฝ๊ฒ ํ์ ํ ์ ์์ด์! ๐
๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง, ์๊ฐ๋ณด๋ค ์ฌ๋ฏธ์์ฃ ? ์ด๋ฐ ๊ธฐ์ ๋ค์ ์ตํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ์ ์ ๋ ์ธ๋ จ๋๊ณ ํจ์จ์ ์ผ๋ก ๋ณํ ๊ฑฐ์์. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์ค๋ ฅ์ ์ฌ๋ฅ๋ท ๊ฐ์ ํ๋ซํผ์์ ํฐ ๊ฐ์น๋ฅผ ๋ฐํํ ์ ์์ด์. ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์๊ฒ ๊ณ ๊ธ JavaScript ํ ํฌ๋์ ๊ฐ๋ฅด์น๋ ๋ฉํ ๊ฐ ๋ ์๋ ์๊ณ , ์ฑ๋ฅ ์ต์ ํ ์ ๋ฌธ๊ฐ๋ก ์ธ์ ๋ฐ์ ์๋ ์์ฃ ! ๐
์, ์ด์ ์ฐ๋ฆฌ์ JavaScript ๋ฆฌํฉํ ๋ง ์ฌํ์ด ๋๋๊ฐ๊ณ ์์ด์. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ ๋ณ์, ํจ์, ์กฐ๊ฑด๋ฌธ, ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ ๋ฆฌํฉํ ๋ง์ ๋ํด ์์๋ดค์ด์. ์ด ๋ชจ๋ ๊ธฐ์ ์ ์ข ํฉํด์ ์ฌ์ฉํ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ํ ๋จ๊ณ ๋ ๋ฐ์ ํ ์ ์์ ๊ฑฐ์์. ๐
๋ง์ง๋ง์ผ๋ก, ๋ฆฌํฉํ ๋ง์ ํ ๋ฒ์ ์๋ฒฝํ๊ฒ ํ ์ ์๋ ๊ฒ ์๋๋ผ๋ ๊ฑธ ๊ธฐ์ตํ์ธ์. ์ฝ๋๋ฅผ ์กฐ๊ธ์ฉ, ๊พธ์คํ ๊ฐ์ ํด ๋๊ฐ๋ ๊ณผ์ ์ด์์. ๊ทธ๋ฆฌ๊ณ ํญ์ ํ ์คํธ๋ฅผ ๋ณํํด์ผ ํด์. ๋ฆฌํฉํ ๋ง ํ์๋ ์ฝ๋๊ฐ ์ฌ์ ํ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ, ์์ง ๋ง์ธ์! ๐งช
์ฌ๋ฌ๋ถ์ JavaScript ์ค๋ ฅ์ด ๋ ๋ก ๋ฐ์ ํ๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ด ๊ธ์ด ์ฌ๋ฌ๋ถ์ ์ฝ๋ฉ ์ฌ์ ์ ๋์์ด ๋์๊ธฐ๋ฅผ ํฌ๋งํฉ๋๋ค. ํ์ดํ ! ๐ช๐
๐ ๊ฒฐ๋ก : JavaScript ๋ฆฌํฉํ ๋ง ๋ง์คํฐ๊ฐ ๋๋ ๊ธธ ๐
์ฌ๋ฌ๋ถ, ์ ๋ง ๋๋จํด์! ์ง๊ธ๊น์ง JavaScript ๋ฆฌํฉํ ๋ง์ ํต์ฌ ๊ธฐ๋ฒ๋ค์ ํจ๊ป ์ดํด๋ดค์ด์. ๋ณ์ ๋ค์ด๋ฐ๋ถํฐ ์์ํด์ ํจ์, ์กฐ๊ฑด๋ฌธ, ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ๊น์ง, ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ ๋ฐฐ์ ์ฃ . ๐๐๐
์ด ๋ชจ๋ ๊ธฐ์ ๋ค์ ๋ง์คํฐํ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ง์ ํ JavaScript ๋ฆฌํฉํ ๋ง์ ๋ฌ์ธ์ด ๋ ์ ์์ด์! ํ์ง๋ง ๊ธฐ์ตํ์ธ์, ๋ฆฌํฉํ ๋ง์ ํ๋ฃป๋ฐค ์ฌ์ด์ ์์ฑ๋๋ ๊ฒ ์๋์์. ๊พธ์คํ ์ฐ์ต๊ณผ ๊ฒฝํ์ด ํ์ํ์ฃ . ๐ฑ
์ฌ๊ธฐ์ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ์ ๋ฆฌํด๋ณผ๊น์?
- ๋ณ์ ์ด๋ฆ์ ์๋ฏธ ์๊ณ ๋ช ํํ๊ฒ ์ง๊ธฐ
- ํจ์๋ ์๊ณ ํ ๊ฐ์ง ์ผ๋ง ํ๋๋ก ๋ง๋ค๊ธฐ
- ๋ณต์กํ ์กฐ๊ฑด๋ฌธ์ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ๊ธฐ
- ๋ฐ๋ณต๋ฌธ์ ๊ฐ๋ฅํ ํ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ธฐ
- ํญ์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ท ํ ๋ง์ถ๊ธฐ
์ด ๋ชจ๋ ๊ธฐ์ ๋ค์ ์ ์ฉํ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ๋ ์ฝ๊ธฐ ์ฝ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ข๊ณ , ํจ์จ์ ์ผ๋ก ๋ณํ ๊ฑฐ์์. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๋ฅ๋ ฅ์ ๊ฐ๋ฐ์๋ก์ ์ฌ๋ฌ๋ถ์ ๊ฐ์น๋ฅผ ํฌ๊ฒ ๋์ฌ์ค ๊ฑฐ์์. ๐
๋ง์ง๋ง์ผ๋ก, ๋ฆฌํฉํ ๋ง์ ๋์ด ์๋ ์ฌ์ ์ด๋ผ๋ ๊ฑธ ๊ธฐ์ตํ์ธ์. ๊ธฐ์ ์ ๊ณ์ ๋ฐ์ ํ๊ณ , ์๋ก์ด ํจํด๊ณผ ๋ฐฉ๋ฒ๋ค์ด ๊ณ์ ๋์ค๊ณ ์์ด์. ๊ทธ๋ฌ๋ ํญ์ ๋ฐฐ์ฐ๋ ์์ธ๋ฅผ ๊ฐ์ง๊ณ , ์๋ก์ด ๊ธฐ์ ์ ์ด๋ฆฐ ๋ง์์ ๊ฐ์ง์ธ์. ๐
์ฌ๋ฌ๋ถ์ JavaScript ๋ฆฌํฉํ ๋ง ์ฌ์ ์ ํ์ด์ด ํจ๊ปํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค! ํ์ดํ ! ๐ช๐
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ