08_์ ์ด๋ฌธ
์ ์ด๋ฌธ์
- ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ์คํ ํ๊ฑฐ๋(์กฐ๊ฑด๋ฌธ)
- ๋ฐ๋ณต ์คํ(๋ฐ๋ณต๋ฌธ) ํ ๋ ์ฌ์ฉ
์ฝ๋๋ ์์์ ์๋๋ก ์์ฐจ์ ์ผ๋ก ์คํํ๋๋ฐ,
- ์ ์ด๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์คํ ํ๋ฆ์ ์ธ์์ ์ผ๋ก ์ ์ดํ ์ ์๋ค. ํ์ง๋ง ์ง๊ด์ ์ธ ์ฝ๋์ ํ๋ฆ์ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค์ด์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํด์น๋ ๋จ์ ์ด ์๋ค.
- forEach, map, filter, reduce ๊ฐ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์์๋ ์ ์ด๋ฌธ์ ์ฌ์ฉ์ ์ต์ ํ์ฌ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ณ ์ ๋ ธ๋ ฅํ๋ค.
8.1 ๋ธ๋ก๋ฌธ
0๊ฐ ์ด์์ ๋ฌธ์ ์ค๊ดํธ {} ๋ก ๋ฌถ์ ๊ฒ์ผ๋ก ์ฝ๋ ๋ธ๋ก ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ธ๋ก๋ฌธ์ ํ๋์ ์คํ๋จ์ ๋ก ์ทจ๊ธํ๋ค.
// ๋ธ๋ก๋ฌธ
{
var foo = 10;
}
// ์ ์ด๋ฌธ
var x = 1;
if (x < 10) {
x++;
}
// ํจ์ ์ ์ธ๋ฌธ
function sum(a, b) {
return a + b;
}
8.2 ์กฐ๊ฑด๋ฌธ
์ฃผ์ด์ง ์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ์คํ์ ๊ฒฐ์ ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ if-else ๋ฌธ๊ณผ switch ๋๊ฐ์ง ์กฐ๊ฑด๋ฌธ์ ์ ๊ณตํ๋ค.
8.2.1 if-else ๋ฌธ
- ์ฃผ์ด์ง ์กฐ๊ฑด์์ ๋ฐ๋ฅธ ์ฐธ๊ณผ ๊ฑฐ์ง(true / false) ์ผ๋ก ํ๊ฐ
- ์กฐ๊ฑด์์ ๊ฐ์์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ๋๋ฆฌ๊ณ else if ๋ฌธ์ ์ฌ์ฉ
- ๋๋ถ๋ถ์ if-else ๋ฌธ์ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ก ๋ฐ๊พธ์ด ์ฌ์ฉ ํ ์ ์๋ค.
if (์กฐ๊ฑด์) {
// ์กฐ๊ฑด์์ด ์ฐธ์ด๋ฉด ์ด ์ฝ๋ ๋ธ๋ก์ด ์คํ
} else {
// ์กฐ๊ฑด์์ด ๊ฑฐ์ง์ด๋ฉด ์ด ์ฝ๋ ๋ธ๋ก์ด ์คํ
}
if (์กฐ๊ฑด์1) {
// ์กฐ๊ฑด์1์ด ์ฐธ์ด๋ฉด ์ด ์ฝ๋ ๋ธ๋ก์ด ์คํ
} else if (์กฐ๊ฑด์2) {
// ์กฐ๊ฑด์2์ด ์ฐธ์ด๋ฉด ์ด ์ฝ๋ ๋ธ๋ก์ด ์คํ
} else {
// ์กฐ๊ฑด์1, 2 ๋ชจ๋ ๊ฑฐ์ง์ด๋ฉด ์ด ์ฝ๋ ๋ธ๋ก์ด ์คํ
}
8.2.2 switch ๋ฌธ
- ์ฃผ์ด์ง ํํ์์ ํ๊ฐํ์ฌ ๊ทธ ๊ฐ๊ณผ ์ผ์นํ๋ ํํ์์ ๊ฐ์ง๋ case ๋ฌธ์ผ๋ก ์คํ
- case ๋ฌธ์ ์ํฉ(case) ์ ์๋ฏธํ๋ ํํ์์ ์ ์ฅํ๊ณ ์ฝ๋ก (:) ์ผ๋ก ๋๋๋ค.
- ๊ทธ ๋ค์ ์คํํ ๋ฌธ๋ค์ ์์น์ํจ๋ค.
- switch ๋ฌธ์ ํํ์๊ณผ ์ผ์นํ๋ case ๋ฌธ์ด ์๋ค๋ฉด
-> default ๋ฌธ์ผ๋ก ์ด๋
-> default ๋ฌธ์์ break ๋ฌธ์ ์๋ตํ๋ ๊ฒ์ด ์ผ๋ฐ์
switch(ํํ์) {
case ํํ์1:
ํํ์๊ณผ ํํ์1์ด ์ผ์นํ๋ฉด ์คํ๋ ๋ฌธ;
break;
case ํํ์2:
ํํ์๊ณผ ํํ์2์ด ์ผ์นํ๋ฉด ์คํ๋ ๋ฌธ;
break;
case ํํ์3:
ํํ์๊ณผ ํํ์3์ด ์ผ์นํ๋ฉด ์คํ๋ ๋ฌธ;
break;
default: ํํ์๊ณผ ์ผ์นํ๋ case๋ฌธ์ด ์์ ๋ ์คํ๋ ๋ฌธ;
}
ํ ์ค๋ฃจ(fall through) ?
switch ๋ฌธ์ ํ์ถํ์ง ์๊ณ switch ๋ฌธ์ด ๋๋ ๋ ๊น์ง
๋ชจ๋ case ๋ฌธ๊ณผ default ๋ฌธ์ ์คํ๋๋ ๊ฒ์ ๋งํ๋ค.
- ํ ์ค๋ฃจ ์์
// ์์ ์์ด๋ก ๋ณํํ๋ค. (4 -> 'April')
var month = 4;
var monthName;
switch(month) {
case 1: monthNAme = 'January';
case 2: monthNAme = 'February';
case 3: monthNAme = 'March';
case 4: monthNAme = 'April';
case 5: monthNAme = 'May';
case 6: monthNAme = 'June';
case 7: monthNAme = 'July';
case 8: monthNAme = 'August';
case 9: monthNAme = 'September';
case 10: monthNAme = 'October';
case 11: monthNAme = 'November';
case 12: monthNAme = 'December';
default: monthName = "Invalid month"
}
console.log(monthName); // Invaild month
8.3 ๋ฐ๋ณต๋ฌธ
๋ฐ๋ณต๋ฌธ์
- ์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ธ ๊ฒฝ์ฐ ์ฝ๋ ๋ธ๋ก์ ์คํ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ for, while, do-while ๋ฌธ์ ์ ๊ณต
8.3.1 for ๋ฌธ
์กฐ๊ฑด์์ด ๊ฑฐ์ง์ผ๋ก ํ๊ฐ๋ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ๋ฐ๋ณต ์คํ
- for ๋ฌธ์ ๋ณ์ ์ ์ธ๋ฌธ, ์กฐ๊ฑด์, ์ฆ๊ฐ์์ ๋ชจ๋ ์ต์ ์ด๋ฏ๋ก ๋ฐ๋์ ์ฌ์ฉํ ํ์๋ ์๋ค.
for (๋ณ์ ์ ์ธ๋ฌธ ๋๋ ํ ๋น๋ฌธ; ์กฐ๊ฑด์; ์ฆ๊ฐ์) {
// ์กฐ๊ฑด์์ด ์ฐธ์ธ ๊ฒฝ์ฐ ๋ฐ๋ณต ์คํํ ๋ฌธ;
}
8.3.2 while ๋ฌธ
์ฃผ์ด์ง ์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด๋ฉด ์ฝ๋ ๋ธ๋ก์ ๊ณ์ ์คํํ๋ฉฐ ๋ฐ๋ณต
- for ๋ฌธ์ ๋ฐ๋ณต ํ์๊ฐ ๋ช ํํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- while ๋ฌธ์ ๋ฐ๋ณต ํ์๊ฐ ๋ถ๋ช ํํ ๋ ์ฃผ๋ก ์ฌ์ฉ
while(์กฐ๊ฑด์) {
// ์กฐ๊ฑด์์ด ์ฐธ์ผ ๋ ์คํํ ๋ฌธ;
}
// ๋ฌดํ ๋ฃจํ
while(true) {
// ...
}
- ๋ฌดํ ๋ฃจํ๋ฅผ ํ์ถํ๊ธฐ ์ํด์๋
-> ์ฝ๋ ๋ธ๋ก ๋ด์ if ๋ฌธ์ผ๋ก ํ์ถ ์กฐ๊ฑด์ ๋ง๋ค๊ณ , break ๋ฌธ์ผ๋ก ์ฝ๋ ๋ธ๋ก์ ํ์ถ
8.3.3 do-while ๋ฌธ
์ฝ๋ ๋ธ๋ก์ ๋จผ์ ์คํํ๊ณ ์กฐ๊ฑด์์ ํ๊ฐ ๋ฐ๋ผ์ ์ฝ๋ ๋ธ๋ก์ ๋ฌด์กฐ๊ฑด ํ ๋ฒ ์ด์ ์คํ
do {
// ...
} while (์กฐ๊ฑด์);
8.3.4 break ๋ฌธ
์ฃผ ์ฌ์ฉ์ ๋ฐ๋ณต๋ฌธ ๋๋ switch ๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ํ์ถ ํ ๋ ์ฌ์ฉ
8.3.5 continue ๋ฌธ
๋ฐ๋ณต๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ํ ์ง์ ์์ ์ค๋จํ๊ณ ์ฆ๊ฐ์์ผ๋ก ์คํ ํ๋ฆ์ ์ด๋
break ๋ฌธ์ฒ๋ผ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ์ง๋ ์๋๋ค.
var string = 'Hello world';
var search = 'l';
var count = 0;
// ๋ฌธ์์ด์ ์ ์ฌ ๋ฐฐ์ด์ด๋ฏ๋ก for ๋ฌธ์ผ๋ก ์ํํ ์ ์๋ค.
for(var i = 0; i < string.length; i++) {
// 'l' ์ด ์๋๋ฉด ํ ์ง์ ์์ ์คํ์ ์ค๋จํ๊ณ ๋ฐ๋ณต๋ฌธ์ ์ฆ๊ฐ์์ผ๋ก ์ด๋ํ๋ค.
if(string[i] !== search) continue;
count++;
}
console.log(count); // 3
// ์ฐธ๊ณ ๋ก String.prototype.match ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๊ฐ์ ๋์์ ํ๋ค.
const regexp = new RegExp(search, 'g');
console.log(string.match(regexp).length); // 3
'๐ Book-Talk > ๋ชจ๋ JS Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive_๊ฐ์ฒด ๋ฆฌํฐ๋ด (0) | 2022.11.11 |
---|---|
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive_ํ์ ๋ณํ (0) | 2022.11.11 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive_์ฐ์ฐ์ (0) | 2022.11.10 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive_๋ฐ์ดํฐ ํ์ (2) | 2022.11.10 |
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive_ํํ์๊ณผ ๋ฌธ (0) | 2022.11.10 |