10. JS์ ์ ์ด๋ฌธ
๐ ์ ์ด๋ฌธ?
์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ์คํํ๊ฑฐ๋ ๋ฐ๋ณต ์คํํ ๋ ์ฌ์ฉํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ ์์์ ์๋ ๋ฐฉํฅ์ผ๋ก ์คํ๋์ง๋ง
์ ์ด๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์คํํ๋ฆ์ ์ธ์์ ์ผ๋ก ์ ์ด ๊ฐ๋ฅํ๋ค.
์ฝ๋์ ์คํ ์์๊ฐ ์ค๊ฐ์ ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ ๊ฐ๋ ์ฑ์ ํด์น๋ ๋จ์ ์ด ๋๊ธฐ๋ ํ์ง๋ง
๋ฐ๋ฅด๊ฒ ์ดํดํ๋๊ฒ์ ์ฝ๋ฉ ์คํฌ์ ๋ง์ ์ํฅ์ ์ฃผ๊ธฐ๋๋ฌธ์ ์์์ผํ๋ค.
๐ ๋ธ๋ก๋ฌธ
๋ธ๋ก๋ฌธ์ 0๊ฐ ์ด์์ ๋ฌธ์ ์ค๊ดํธ{}๋ก ๋ฌถ์ ๊ฒ.
JS์์๋ ๋ธ๋ก๋ฌธ์ ํ๋์ ์คํ ๋จ์๋ก ์ทจ๊ธํ๋ค.
๋ณดํต ๋ธ๋ก๋ฌธ์ ์ ์ด๋ฌธ์ด๋ ํจ์๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
๐ ์กฐ๊ฑด๋ฌธ
์ฃผ์ด์ง ์กฐ๊ฑด์์ ํ๊ณผ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ์คํ์ ๊ฒฐ์ ํ๋ค.
์กฐ๊ฑด์์ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ํํ์์ด๋ค.
์กฐ๊ฑด๋ฌธ์๋
1. if๋ฌธ
2.switch๋ฌธ
์ด๋ ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
๐ฃ if~ else๋ฌธ
๋ ผ๋ฆฌ์ ์ฐธ ๋๋ ๊ฑฐ์ง์ ๋ฐ๋ผ ์คํํ ์ฝ๋ ๋ธ๋ก์ ๊ฒฐ์ ํ๋ค.
์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ true์ผ๋ if๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ์คํ,
false์ผ๋ else๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ์คํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์ ๋ฐ๋ผ ์คํ๋ ์ฝ๋ ๋ธ๋ก์ ๋๋ฆฌ๊ณ ์ถ์๋ else if๋ฌธ์ ์ฌ์ฉํ๋ค.
if(์กฐ๊ฑด์1){
// ์กฐ๊ฑด์1์ด ์ฐธ์ด๋ฉด ์ด ์ฝ๋๋ธ๋ก์ด ์คํ.
}
else if(์กฐ๊ฑด์2){
// ์กฐ๊ฑด์2๊ฐ ์ฐธ์ด๋ฉด ์ด ์ฝ๋๋ธ๋ก์ด ์คํ.
}
else{
// ์กฐ๊ฑด์์ด ๊ฑฐ์ง์ด๋ฉด ์ด ์ฝ๋๋ธ๋ก์ด ์คํ.
}
else if, else๋ฌธ์ ์ต์ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ else if๋ฌธ์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๋ณดํต ์กฐ๊ฑด์์ด ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ํ๊ฐ๋์ด์ผ ํ๋๋ฐ ๋ถ๋ฆฌ์ธ์ด ์๋๊ฐ์ผ๋ก ํ๊ฐ๋ ๋๋
JS์์ง์ ์ํด ์๋ฌต์ ์ผ๋ก ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ๊ฐ์ ๋ณํ๋๋ค.
if๋ฌธ์ ์๋ ์์์ฒ๋ผ ์ผํญ์ฐ์ฐ์๋ก ๋ฐ๊ฟ์ธ์๋ ์๋ค.
var x = 2;
var result = x % 2? 'ํ์' : '์ง์';
console.log(result) // ์ง์
์ผํญ์ฐ์ฐ์๋ [ ์กฐ๊ฑด์? true์ผ๋ ๊ฐ : false์ผ๋ ๊ฐ ] ์ด๋ฐ์์ผ๋ก ์ฐ์ธ๋ค.
๐ฃ switch๋ฌธ
์ฃผ์ด์ง ํํ์์ ํ๊ฐํด ๊ทธ ๊ฐ๊ณผ ์ผ์นํ๋ ํํ์์ ๊ฐ๋ case ๋ฌธ์ผ๋ก ์คํ ํ๋ฆ์ ์ฎ๊ธด๋ค.
switch (ํํ์) {
case ํํ์1:
switch ๋ฌธ์ ํํ์๊ณผ ํํ์1์ด ์ผ์นํ๋ฉด ์คํ๋ ๋ฌธ;
break;
case ํํ์2:
switch ๋ฌธ์ ํํ์๊ณผ ํํ์2์ด ์ผ์นํ๋ฉด ์คํ๋ ๋ฌธ;
break;
default:
switch๋ฌธ์ ํํ์๊ณผ ์ผ์นํ๋ case๋ฌธ์ด ์์๋ ์คํ๋ ๋ฌธ;
}
switch๋ฌธ์ ํํ์์ ๋ถ๋ฆฌ์ธ ๊ฐ๋ณด๋ค๋ ๋ฌธ์์ด, ์ซ์ ๊ฐ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ทธ๋์ ๋ค์ํ ์ํฉ์ ๋ฐ๋ผ ์คํํ ์ฝ๋ ๋ธ๋ก์ ๊ฒฐ์ ํ ๋ ์ฌ์ฉํ๋ค.
๐ ๋ฐ๋ณต๋ฌธ
์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ธ ๊ฒฝ์ฐ ์ฝ๋ ๋ธ๋ก์ ์คํ.
๊ทธ ํ ์กฐ๊ฑด์์ ํ๊ฐ๋ฅผ ์กฐ๊ฑด์์ด ๊ฑฐ์ง์ผ๋๊น์ง ๋ฐ๋ณตํ๋ค.
JS์์ ๋ฐ๋ณต๋ฌธ์
1. for๋ฌธ
2. while๋ฌธ
3. do... while๋ฌธ
3๊ฐ์ง๊ฐ ์๋ค.
๐ฃ for๋ฌธ
for๋ฌธ์ ์กฐ๊ฑด์์ด ๊ฑฐ์ง์ผ๋ก ํ๊ฐ๋ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ๋ฐ๋ณต ์คํํ๋ค.
for๋ฌธ์ ๋งค์ฐ ์ค์ํ๋ค.( ๊ผญ ์ดํดํ๊ณ ๋์ด๊ฐ๊ธฐ! )
1. for๋ฌธ ๋จ๋ ์ผ๋ก ์ฐ๊ธฐ
for(๋ณ์ ์ ์ธ๋ฌธ ๋๋ ํ ๋น๋ฌธ; ์กฐ๊ฑด์; ์ฆ๊ฐ์){
์กฐ๊ฑด์์ด ์ฐธ์ผ ๊ฒฝ์ฐ ๋ฐ๋ณต ์คํ๋ ๋ฌธ;
}
for(let i=0; i<2; i++){
console.log(i);
}
ํ์ด์ ์ด์ผ๊ธฐํ๊ธฐ
for(i๋ 0๋ถํฐ ์์ํ๊ณ ; i๋ 2๋ฏธ๋ง์ผ๋๊น์ง ๋ฐ๋ณตํ๊ณ ; ๋ฐ๋ณต๋ ๋๋ง๋ค i๋ 1์ฉ ์ฆ๊ฐํ๋ค;){
console.log(i) // 0, 1๊น์ง ๋ฐ๋ณตํ๊ณ i๋ 2๋ฏธ๋ง์ผ๋๊น์ง ์กฐ๊ฑด์ ๊ฑธ๋ ค์ ๋ฉ์ถ๋ค.
}
for๋ฌธ์ ๋ณ์ ์ ์ธ๋ฌธ, ์กฐ๊ฑด์, ์ฆ๊ฐ์์ ๋ชจ๋ ์ต์ ์ด๋ค.
ํ์ง๋ง ์ด๋ค์๋ ์ ์ธํ์ง ์์ผ๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผํ๋ค.
2. for๋ฌธ ์ค์ฒฉ์ผ๋ก ์ฐ๊ธฐ
for๋ฌธ ๋ด์ for๋ฌธ์ ์ค์ฒฉํด์ ์ธ ์ ์๋ค.
์๋ ์์๋ ๋๊ฐ์ ์ฃผ์ฌ์๋ฅผ ๋์ก์๋ ๋ ๋์ ํฉ์ด 6์ด ๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ์ด์ค ์ค์ฒฉ for๋ฌธ.
for(let i=0; i <= 6; i++){
for(let j=1; j <= 6; j++){
if(i + j === 6) console.log(`[${i}, ${j}]`);
}
}
// [1,5]
// [2,4]
// [3,3]
// [4,2]
// [5,1]
๐ฃ while ๋ฌธ
์ฃผ์ด์ง ์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด๋ฉด ์ฝ๋ ๋ธ๋ก์ ๊ณ์ ๋ฐ๋ณต ์คํํ๋ค.
while์ ๋ฐ๋ณต ํ์๊ฐ ๋ถ๋ช ํํ ๋ ์ฌ์ฉ๋๋ค.
var count = 0;
while (true) {
console.log(count);
count++;
// count 3์ด๋ฉด ์ฝ๋ ๋ธ๋ก์ ํ์ถํ๋ค.
if(count === 3) break;
} // 0 1 2
์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ์ธ์ ๋ ์ฐธ์ด๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง๋๋ฐ
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ํ์ถ์กฐ๊ฑด์ ๋ง๋ค๊ณ break๋ฌธ์ผ๋ก ์ฝ๋ ๋ธ๋ก์ ํ์ถํ๋ค.
๐ฃ do... while ๋ฌธ
์ฝ๋ ๋ธ๋ก์ ๋จผ์ ์คํํ๊ณ ์กฐ๊ฑด์์ ํ๊ฐํ๋ค.
๊ทธ๋์ ์ฝ๋ ๋ธ๋ก์ ๋ฌด์กฐ๊ฑด ํ๋ฒ ์ด์ ์คํ๋๋ค.
var count = 0;
//count๊ฐ 3๋ณด๋ค ์์ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ๊ณ์ ๋ฐ๋ณตํ๋ค.
do {
console.log(count); // 0 1 2
count++;
}
while(count < 3);
๐ฃ break ๋ฌธ
๋ ์ด๋ธ ๋ฌธ, ๋ฐ๋ณต๋ฌธ ๋๋ switch๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ํ์ถํ๋ค.
๊ทธ ์ธ์ break๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฌธ๋ฒ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๋ ์ด๋ธ ๋ฌธ์ ์๋ณ์๊ฐ ๋ถ์ ๋ฌธ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํ ์์๋ฅผ ์ ์ดํ๋๋ฐ ์ฌ์ฉํ๋ค.
switch๋ฌธ์ case์ default๋ฌธ๋ ๋ ์ด๋ธ ๋ฌธ์ด๋ค.
ex) case ์กฐ๊ฑด์1: / default :
break๋ฌธ์ ์ฌ์ฉํ ๋ ํ์ถํ ๋ ์ด๋ธ ์๋ณ์๋ฅผ ์ง์ ํด์ผ ํ๋ค.
break ๋ ์ด๋ธ ์๋ณ์;
์ค์ฒฉ๋ for๋ฌธ์์๋ ๋ด๋ถ for๋ฌธ์์ break๋ฅผ ์คํํ๋ฉด ๋ฐ๊นฅ๊น์ง ๋ชจ๋ ํ์ถํ๋๊ฒ ์๋
๋ด๋ถ๋ง ํ์ถํด์ ์ธ๋ถ for๋ฌธ์ผ๋ก ์ง์ ํ๋ค.
๊ทธ๋์ ์ธ๋ถ for๋ฌธ์ ํ์ถํ๋ ค๋ฉด ์ธ๋ถ for๋ฌธ์ ๋ ์ด๋ธ๋ฌธ์ ๋ถ์ฌ์ผํ๋ค.
// outer๋ผ๋ ์๋ณ์๊ฐ ๋ถ์ ๋ ์ด๋ธ for๋ฌธ
outer: for(var i=0; i<3; i++){
for(var j=0; j<3; j++){
// i + j๊ฐ 3์ด๋ฉด outer๋ผ๋ ์๋ณ์๊ฐ ๋ถ์ ๋ ์ด๋ธ for๋ฌธ์ ํ์ถํ๋ค.
if(i+j === 3) break outer;
console.log(`inner [${i}, ${j}]`);
}
}
console.log('Done!');
์ธ๋ถ for๋ฌธ์ ํ์ถํ ๋ ๋นผ๊ณ ๋ ๋ ์ด๋ธ ๋ฌธ์ ํ๋ฆ์ด ๋ณต์กํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋๋น ์ง๊ธฐ ๋๋ฌธ์
์ผ๋ฐ์ ์ผ๋ก๋ ๊ถ์ฅํ์ง ์๋๋ค.
๐ฃ continue ๋ฌธ
๋ฐ๋ณต๋ฌธ์ ์ฝ๋ ๋ธ๋ก ์คํ์ ํ ์ง์ ์์ ์ค๋จํ๊ณ ๋ฐ๋ณต๋ฌธ์ ์ฆ๊ฐ์์ผ๋ก ์คํ ํ๋ฆ์ ์ด๋์ํจ๋ค.
break์ฒ๋ผ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ์ง๋ ์๋๋ค.
var string = 'Hello World';
var search = 'l';
var count = 0;
// continue๋ฌธ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด if๋ฌธ ๋ด์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
for(var i=0; i<string.length; i++){
if(string[i] === search){
count++;
}
}
//continue๋ฌธ์ ์ฌ์ฉํ๋ฉด if๋ฌธ ๋ฐ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
for(var i=0; i<string.length; i++){
if(string[i] === search) continue;
count++;
}
if๋ฌธ ๋ด์์ ์คํํด์ผ ๋ ์ฝ๋๊ฐ ํ์ค์ด๋ผ๋ฉด coutinue๋ฌธ์ ์ฌ์ฉํ ๋ ๋ณด๋ค ๊ฐํธํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
ํ์ง๋ง ๊ทธ ๋ฐ๋๋ผ๋ฉด coutinue๋ฌธ์ ์ฌ์ฉํ๋๊ฒ ๊ฐ๋ ์ฑ์ด ๋ ์ข๋ค.
๐ฃ ์ผํญ ์ฐ์ฐ์์ if else๋ฌธ์ ์ฐจ์ด์
* ํ ๋น์ ์ฐจ์ด.
1. ์ผํญ์ฐ์ฐ์๋ ์กฐ๊ฑด์ ๋ํ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ๋ก ๋ณ์์ ํ ๋น.
2. if๋ฌธ์ ์กฐ๊ฑด์ ์์์ ํ ๋น์ ํด์ผํ๋ค.
* scope์ ์ฐจ์ด.
1. ์ผํญ์ฐ์ฐ์๋ ๋ธ๋ก๋ฌธ์ ๋ง๋ค์ ์๋ค. ๊ทธ๋์ ์ง์ญ๋ณ์๋ฅผ ์์ฑ ํ์ง ๋ชปํ๋ค.
2. if๋ฌธ ์ค๊ดํธ๋ก ๊ฐ์ธ์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ก๋ฌธ์ด๋ค. ์ง์ญ๋ณ์๋ฅผ ์์ฑํ ์ ์๋ค.
๐ฃ switch ๋ฌธ์์ break๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด?
fall through ํ์์ด ์ผ์ด๋๋ค.
break๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ตฌ๋ฉ ์ฌ์ด๋ก ํ์์ด ๋จ์ด์ง๋๊ฒ์ฒ๋ผ
์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ์ถ๋ ฅํ๋๊ฒ ์๋๋ผ
default๊น์ง switch๋ฌธ์ ๋ชจ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
๐ฃ ๊ฐ๊ฐ์ ๋ฐ๋ณต๋ฌธ๋ค์ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋๊ฐ?
1. for๋ฌธ์ ๋ฐ๋ณต ํ์๊ฐ ๋ช ํํ ์ํฉ์ ์ฌ์ฉํ๋ค.
2. while๋ฌธ์ ๋ฐ๋ณต ํ์๊ฐ ๋ช ํํ์ง ์์ ์ํฉ์์ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ผ ํ๋ ์ํฉ์ ์ฌ์ฉํ๋ค.
๐ฃ while, do while๋ฌธ์ ์ฐจ์ด์
while๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด ์์์กฐ์ฐจ ํ์ง ์์ง๋ง
do while๋ฌธ์ ์กฐ๊ฑด์ ๋์ค์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ์ฒ์์ do๋ฌธ์ ์คํํ๋ค.
๐ฃ ๋ ์ด๋ธ์ด๋?
๋ ์ด๋ธ์ ์๋ณ์๊ฐ ๋ถ์ ๋ฌธ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํ ์์๋ฅผ ์ ์ดํ๋๋ฐ ์ฌ์ฉํ๋ค.
๋ ์ด๋ธ ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ด์ค for๋ฌธ์์ ๋ด๋ถ for๋ฌธ์์๋ ์ธ๋ถ for๋ฌธ์ ์ปจํธ๋กค ํ ์ ์๋ค.