210806 ๊ฐœ๋ฐœ๊ธฐ๋ก: switch(true)

2021. 8. 7. 01:00ใ†๐Ÿ“” TIL

 

ToastUI ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์— ํฅ๋ฏธ๋กœ์šด ์ฝ์„๊ฑฐ๋ฆฌ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ์ค‘์—์„œ switch(true) ํŒจํ„ด์— ๊ด€ํ•œ ๊ธ€์ด ํฅ๋ฏธ๋กœ์›Œ ํšŒ์‚ฌ ์ฝ”๋“œ์— ์ ์šฉํ•ด๋ณด์•˜๋‹ค.

 

๐ŸŒ•  switch(true) ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ

์šฐ์„  switch(true) ํŒจํ„ด์˜ ์›๋ฆฌ๋Š”, ๊ธฐ์กด switch ๋ฌธ์— ์ ์šฉํ•˜๋˜ ๊ฐ’(value)์„ ํ‘œํ˜„์‹์œผ๋กœ๋„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ‘œํ˜„์‹์ด๋ž€ boolean ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

๐ŸŒฟ  ๊ธฐ๋ณธ switch(Value) ํŒจํ„ด

๊ธฐ์กด switch๋ฌธ ์ธ์ž์˜ Value๋Š” ํŠน์ •ํ•œ ๊ฐ’(value) ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Value ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ง€๋ƒ์— ๋”ฐ๋ผ ํ•ด๋‹น case ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜์—ฌ Value ๊ฐ’์ด case์˜ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค,.

// ๊ธฐ์กด switch ๋ฌธ 

switch (Value){
  case "A":
    return "this is A";
  case "B":
    return "thid is B";
}

 

๐ŸŒฟ  switch(true) ํŒจํ„ด

switch(true) ํŒจํ„ด์€ ํŠน์ • Value ๊ฐ’ ๋Œ€์‹  true๋ฅผ ๋ฐ›์•˜๋‹ค. Value๊ฐ€ true๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹๋‹ค.

case์˜ ํ‘œํ˜„์‹์ด true ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด, Value ์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น case ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค.

// switch(true) ํŒจํ„ด
const member = ["lion", "cat"]

switch (true){
  case member.includes("lion"): // true ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰
    return "it is lion king"; 
  case member.includes("tiger"): // false ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰X
    return "it is tiger king";
}

 

์‹ค์ „์—์„œ ์ ์šฉํ•œ ์ฝ”๋“œ ์˜ˆ์‹œ

switch(true) ํŒจํ„ด์€ ๋ณต์žกํ•œ if/else ๊ตฌ๋ฌธ์„ ๋Œ€์ฒดํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ํšŒ์‚ฌ์—์„œ if ๊ฐ€ ๋–ก์น ๋œ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ์ด ํŒจํ„ด์„ ์ ์šฉํ•ด๋ดค๋‹ค.

 

์•„๋ž˜๋Š” statusList ๋ผ๋Š” ๋ฐฐ์—ด์ด ์–ด๋–ค ์›์†Œ๋ฅผ ํฌํ•จ ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ if ๋ถ„๊ธฐ๋ฌธ์„ ํƒ€๊ฒŒ ๋œ๋‹ค.

// ๊ธฐ์กด if ์กฐ๊ฑด๋ฌธ

if (statusList.includes("๋Œ€๊ธฐ")) {
	...
}

if (statusList.includes("์ง„ํ–‰์ค‘")) {
	...
}

if (statusList.includes("์™„๋ฃŒ")) {
	...
}

์‹ค์ œ๋กœ๋Š” if ๋ฌธ์ด ๋” ์žˆ์ง€๋งŒ ์˜ˆ์‹œ๋กœ 3๊ฐœ๋งŒ ์จ๋‘์—ˆ๋‹ค.

์ด๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•˜๋ฉด ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ๋” ์ง๊ด€์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋˜์—ˆ๋‹ค. 

ํ•˜์ง€๋งŒ, ์ด๋Š” ๊ฐœ์ธ์˜ ์˜๊ฒฌ์ผ ๋ฟ์ด๊ณ , ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์€ ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ์˜๊ฒฌ๋„ ๋งŽ์ด ๋ƒˆ๋‹ค.(์ฐธ๊ณ : @SeanBarryUK ํŠธ์œ—, @JavaScriptDaily ํŠธ์œ—)

// switch(true) ํŒจํ„ด ์ ์šฉ ํ›„

switch (true) {
   
    case statusList.includes("๋Œ€๊ธฐ"):
        ...
        break;

    case statusList.includes("์ง„ํ–‰์ค‘"):
        ...
        break

    case statusList.includes("์™„๋ฃŒ"):
        ...
        break

    default:
        ...
        break
}

 

 

ํ•„์ž๊ฐ€ ๋Š๋‚€ ์ด ํŒจํ„ด์˜ ์žฅ์ ์€ ์กฐ๊ฑด์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•  ๋•Œ๋‹ค.

๊ธฐํš์ž๊ฐ€ ์ด๋Ÿฐ ์š”๊ตฌ๋ฅผ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

๋งŒ์•ฝ ๋ฐฐ์—ด statusList ๊ฐ€  '๋Œ€๊ธฐ' ์™€ '์ง„ํ–‰์ค‘' ์›์†Œ๋ฅผ ๋ชจ๋‘๋ฅผ ๊ฐ€์ง„๋‹ค๋ฉด, "๋Œ€๊ธฐ" ์ผ๋•Œ์˜ ์ƒํ™ฉ์„ ์šฐ์„ ์‹œ ํ•˜์—ฌ ์‹คํ–‰์‹œ์ผœ์ฃผ์„ธ์š”!

 

if/else ๋ฌธ์œผ๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ or ์กฐ๊ฑด์„ ๋–ก์น ํ•ด์•ผ๊ฒ ์ง€๋งŒ, switch(true) ํŒจํ„ด์—์„ ,

๊ทธ์ € case "๋Œ€๊ธฐ" ๋ฅผ  case "์ง„ํ–‰์ค‘" ๋ณด๋‹ค ๋จผ์ € ๋ฐฐ์น˜ํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค. "๋Œ€๊ธฐ"์˜ case ๋ฅผ ๋จผ์ € ๋งŒ๋‚˜๊ณ  break ๋กœ switch ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๋ฉด ๊ทธ๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ฐ€๋…์„ฑ๋„ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ, ์–ด๋–ค ์ƒํ™ฉ์ด๋‚˜ ๊ธฐํš ์š”๊ตฌ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

 

Toast UI ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ switch (true) ํŒจํ„ด ์‚ฌ์šฉํ•˜๊ธฐ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.