๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Front-end/JS

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ œ์–ด๋ฌธ Control flow statement

by ciocio 2021. 7. 23.

Achivement Goals

 

๐Ÿ  ์กฐ๊ฑด๋ฌธ

 

โœ…  truthy์™€ falsy ๊ฐ€ ์กฐ๊ฑด๋ฌธ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•œ ์—„๊ฒฉํ•œ ๋น„๊ต(=== , !==)์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  if ์™€ else if , else๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ฌด๋ฆฌ์—†์ด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋ฅผ (&&, ||, ! ...)์„ ํ†ตํ•ด ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ  ๋ฐ˜๋ณต๋ฌธ

 

โœ…  ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  for๋ฌธ๊ณผ ๋ฌธ์ž์—ด, ์ˆซ์ž๋ฅผ ์ด์šฉํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โœ…  ๊ธฐ๋ณธ์ ์ธ for๋ฌธ (for (let i = 0; i < 5; i++))์„ ์‘์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ for๋ฌธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

โœ…  for์™€ while์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  ๋ฐ˜๋ณต๋ฌธ์— ์กฐ๊ฑด๋ฌธ์„ ์ ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…  ์ด์ค‘ ํฌ๋ฌธ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ  ์ œ์–ด๋ฌธ ์™œ ์จ?

 

์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ (์กฐ๊ฑด๋ฌธ)

๋ฐ˜๋ณต์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐ˜๋ณต๋ฌธ)

 

์ œ์–ด๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ธ์œ„์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ ๋ณ€๊ฒฝ์€,

๋‹จ์ˆœํžˆ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ์ง๊ด€์ ์ธ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

๋‚˜์ค‘์— ์‚ดํŽด๋ณผ forEach, map, filter, reduce ๊ฐ™์€ ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š”

์ œ์–ด๋ฌธ์˜ ์‚ฌ์šฉ์„ ์–ต์ œํ•˜์—ฌ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด๋‹ค.

 

 

๐Ÿ“Œ  ์ œ์–ด๋ฌธ ์ข…๋ฅ˜?

 

๐Ÿ  ๋ธ”๋ก๋ฌธ

 

// ๋ธ”๋ก๋ฌธ

{
   var foo = 10;   
}


// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

function sum(a, b){
   a + b;   
}

 

๋ธ”๋ก๋ฌธ์€ ์–ธ์ œ๋‚˜ ๋ฌธ์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋Š”, ์ž์ฒด ์ข…๊ฒฐ์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

๋ธ”๋ก๋ฌธ์˜ ๋์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž.

 

 

๐Ÿ  ์กฐ๊ฑด๋ฌธ

 

 

โ—พ if...else ๋ฌธ

 

// if...else ๋ฌธ์˜ ์ •์„ if / else if / else 

var x = 2;
var result;

if(x % 2){
   result = 'ํ™€์ˆ˜';   
}else{
   result = '์ง์ˆ˜';   
}

 

// ์ฝ”๋“œ ๋‚ด ๋ธ”๋ก๋ฌธ์ด 1๊ฐœ๋ฉด {} ์ƒ๋žต ๊ฐ€๋Šฅ

var num = 2;
var kind;

if(num > 0) kind = '์–‘์ˆ˜';
else if(num < 0) kind = '์Œ์ˆ˜';
else kind = '์˜';

 

// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (๊ฒฝ์šฐ์˜ ์ˆ˜ 2๊ฐ€์ง€)

var x = 2;

var result = x % 2 ? 'ํ™€์ˆ˜' : '์ง์ˆ˜';

 

// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (๊ฒฝ์šฐ์˜ ์ˆ˜ 3๊ฐ€์ง€)

var num = 2;

var kind = num ? (num > 0 ? '์–‘์ˆ˜' : '์Œ์ˆ˜') : '์˜';

 

์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์€ ๊ฐ’์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, if else ๋ฌธ์€ ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ์ด๋‹ค. ์ฆ‰, if else ๋ฌธ์€ ๋ณ€์ˆ˜์— ํ• ๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค.

 

 

โ—พ switch ๋ฌธ

 

var year = 2000;
var month = 2;
var days = 0;


switch(month){
   case 1: case 3: case 5: case 7: case 8: case 10: case 12:   
      days = 31;      
      break;      
   case 4: case 6: case 9: case 11:   
      days = 30;      
      break;      
   case 2:   
      days = ((year % 4 === 0 && year % 100 !== 0) || (year % 400)) ? 29 : 28;      
      break;      
   default:   
      console.log('Invalid month');      
}

console.log(days);

 

์กฐ๊ฑด๋ฌธ์€ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€๋ฉด์„œ ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•œ๋‹ค. ์ผ€์ด์Šค๋“ค์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์ ‘ํ•ด๋ณด์ž. 

 

 

 

๐Ÿ  ๋ฐ˜๋ณต๋ฌธ

 

 

โ—พ for ๋ฌธ

 

// for๋ฌธ์˜ ์ •์„

for (var i = 0; i N 2; i++){
   console.log(i);   
}

 

// ๋ฌดํ•œ ๋ฃจํ”„

for(;;){...}

 

// ์ด์ค‘ for๋ฌธ

for(var i = 1; i <= 6; i++){
   for(var 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(count < 3){
   console.log(count);   
   count++;  // for๋ฌธ๊ณผ ๋‹ค๋ฅด๊ฒŒ while๋ฌธ ๋‚ด๋ถ€์—์„œ ์กฐ๊ฑด์„ ์ฆ๊ฐํ•ด๋ฒ„๋ฆผ   
}

// for(๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ or ๋ณ€์ˆ˜ ํ• ๋‹น๋ฌธ; ์กฐ๊ฑด์‹; ์ฆ๊ฐ์‹)
// while(์กฐ๊ฑด์‹){์ฆ๊ฐ์‹}

 

// ๋ฌดํ•œ ๋ฃจํ”„

while(true){...}

 

// ๋ฌดํ•œ ๋ฃจํ”„ ํƒˆ์ถœ break

var count = 0;

while(true){
   console.log(count);   
   count++;   
   if(count === 3) break;   
}

 

 

โ—พ do...while ๋ฌธ

 

// ๊ทธ๋ƒฅ while(์กฐ๊ฑด๋ฌธ)์„ ๋’ค๋กœ ๋บ€๊ฒƒ ...
// ๋ญ์–Œ ๋‹ค๋ฅผ ๊ฒŒ ์—†์ž–์•„

var count = 0;

do{
   console.log(count);   
   count++;   
}while(count < 3);

 

์ฝ”๋“œ ๋ธ”๋ก์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ   -->  ์กฐ๊ฑด์‹์„ ํ‰๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๋ฌด์กฐ๊ฑด ํ•œ๋ฒˆ ์ด์ƒ ์‹คํ–‰๋˜๋Š” ํŠน์ง•์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.

 

 

๐Ÿ  break ๋ฌธ

 

๋ ˆ์ด๋ธ” ๋ฌธ, ๋ฐ˜๋ณต๋ฌธ(for, for...in, for...of, while, do...while) ๋˜๋Š” switch๋ฌธ์˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ํƒˆ์ถœํ•œ๋‹ค.

์ด๋“ค ์ด์™ธ์— break๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด SyntaxError(๋ฌธ๋ฒ• ์—๋Ÿฌ)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

// if๋ฌธ -> Uncaught SyntaxError: Illegal break statement

if (true){
   break;
}

 

// ๋ ˆ์ด๋ธ” ๋ฌธ -> ์‹๋ณ„์ž๊ฐ€ ๋ถ™์€ ๋ฌธ

// ex. foo๋ผ๋Š” ์‹๋ณ„์ž๊ฐ€ ๋ถ™์€ ๋ ˆ์ด๋ธ” ๋ฌธ 

   foo: console.log('foo');
   
    
// ex. foo๋ผ๋Š” ์‹๋ณ„์ž๊ฐ€ ๋ถ™์€ ๋ ˆ์ด๋ธ” ๋ธ”๋ก๋ฌธ

   foo: {   
      console.log(1);      
      break foo;        // foo ๋ ˆ์ด๋ธ” ๋ธ”๋ก๋ฌธ์„ ํƒˆ์ถœํ•œ๋‹ค.      
      console.log(2);      
   }

 

๋ ˆ์ด๋ธ” ๋ฌธ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์‹ค, switch๋ฌธ์˜ case๋ฌธ๊ณผ default๋ฌธ๋„ ๋ ˆ์ด๋ธ” ๋ฌธ์ด๋‹ค. 

๋ ˆ์ด๋ธ” ๋ฌธ์„ ํƒˆ์ถœํ•˜๋ ค๋ฉด break๋ฌธ์— ๋ ˆ์ด๋ธ” ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

// outer๋ผ๋Š” ์‹๋ณ„์ž๊ฐ€ ๋ถ™์€ ๋ ˆ์ด๋ธ” for๋ฌธ

outer: for(var i=0; i<3; i++){
          for(var j=0; j<3; j++){          
             if(i+j === 3) break outer;             
             console.log(`inner [${i}, ${j}]`);             
          }          
          console.log('Done!');          
       }

 

๋ ˆ์ด๋ธ” ๋ฌธ์€ ์ค‘์ฒฉ๋œ for๋ฌธ ์™ธ๋ถ€๋กœ ํƒˆ์ถœํ•  ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ, ๊ทธ ๋ฐ–์˜ ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ ˆ์ด๋ธ” ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์ด ๋ณต์žกํ•ด์ ธ์„œ ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๊ณ , ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

 

๐Ÿ  continue ๋ฌธ

 

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++;
}

 

// ์ฐธ๊ณ ๋กœ String.prototype.match ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ฐ™์€ ๋™์ž‘์„ ํ•œ๋‹ค.

const regexp = new RegExp(search, 'g');

console.log(string.match(regexp).length);

 

 

 

์ถœ์ฒ˜

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive - ์ด์›…๋ชจ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€