CodeSpitz77 2ํ_Flow control statement (1)
๐๐๐
์ฝ๋์คํผ์ธ ๊ฐ์ ์ ๋ฆฌ๋ก
๋ณต์ต
Flow๋? ์ฐ๋ฆฌ๊ฐ ์ง ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ , ์ ์ฌ๋ ์๊ฐ, ๋ช ๋ น๊ณผ ๋ฐ์ดํฐ๋ก ๋๋ ์ ธ์ ์ ์ฌ๋ ๋ค์์ ๋ช ๋ น์ด ์ญ ํ๊บผ๋ฒ์ ์คํ๋๋๋ฐ, ๋ช ๋ น์ด ์ฐจ๊ทผ์ฐจ๊ทผ ์คํ๋๋ ๊ณผ์ .
0. Record, Completion Record ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ ์์๋ณด์.
0.1 Record
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฌธ์ ์ฒ๋ฆฌํ ๋ ์๊ณผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ค. ์์ ํ๋์ ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋ ๋ฟ์ด์ง๋ง, ๋ฌธ์ ์คํ๋จ์๋ก ์ฒ๋ฆฌ๋๋ค. ๋ฌธ์ 10๊ฐ ์ฐ๋ฉด, 10๊ฐ์ ์คํ๋จ์๊ฐ ์๊ฐ๋๋ค. (์์ 10๊ฐ ์จ๋, ๊ฐ ํ๋๋ก ์๋ ด๋ ๋ฟ์ด๋ค.) ๋ฌธ์ ๊ฐฏ์๋ฅผ ๋๋ฆฌ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐฏ์๋งํผ์ ์ฒ๋ฆฌํด์ผํ ๊ณผ์ ๋ก ์๊ณ ์๋ค. ํ์คํ์ค์ ๋ฌธ์ด ์๊ธธ๋ ๋ง๋ค ๊ณผ์ ๋ก ๋ฑ๋กํด ๋๋๋ค. => Record
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์ง๋ฉด Record ํ๋ํ๋๋ก ๋ฒ์ญ์ด ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฐ๋ฆฌ๊ฐ ์ง ์ฝ๋๋ฅผ ํ์ฑํ ๋ ๋ฌธ๋ค์ Record๋จ์๋ก ํ์ฑํ๋ค. Record๊ฐ ํ๋ํ๋ ์์ฑ์ด๋๋ฉด flow๋ฅผ ํ๊ณ ์ญ ์์ง์ธ๋ค.
Record๋ฅผ ๋ง๋ค๊ณ Record๋ฅผ ์คํํ๋ ๊ณผ์ ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฃผ ์๋์๋ฆฌ์ด๋ค.
์์ฆ ํ๋ ๋ธ๋ผ์ฐ์ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ 3.1์์ง์์ ๋์ง ์๋๋ค. (์ธ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋งํ๋ค์ ๊ฐ์ ์ฑ ๋ค์ ์ข์ง๋ง, ์๋์๋ฆฌ๋ ํ๋ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ฅด๋ค. (3.1๋ฒ์ ์์ง๊ธฐ์ค์ผ๋ก ์ค๋ช ๋ ์ฑ )) ๋ชจ๋ ํญ๋ชฉ์ ์์ด์ ๋ธ๋ผ์ฐ์ ๋ค์ด ํด์ํ๋ ๋ฐฉ์์ด ๋ฌ๋ผ์ก๋ค. ์คํ๋ฌธ์๋ ๋ฌ๋ผ์ง. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋์๋ฆฌ๋ฅผ ์ง๊ธ ๋ฒ์ ์์ ๋ฐฐ์๋, ๋งค๋ ์คํ์ด ๊ฐฑ์ ๋๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์๊ณ ์๋ ์ง์์ด ๋ค์ํด์๋ ๋ฌด์๋ฏธํด์ง ์ ์๋ค. ๊ธฐ์ ์ธต์ ์๋์๋ฆฌ๋ณด๋ค๋ ๋ฌด์์ ์๋ฏธํ๊ณ ์ถ์์ ์ธ ์๋ฏธ๋ ๋ฌด์์ธ์ง ์ฒด๊ณ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด ๋ ์๋ฏธ์๋ค.. = ์๋์๋ฆฌ๋ณด๋ค๋ ๊ทผ๋ณธ์ ์ธ ๋ถ๋ถ์ ๋ฐฐ์ฐ์.
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ Record๋ฅผ ๋ถ๋ฅด๋ ๋ง์ ๊ต์ฅํ ๋ง๋ค. ์ธ์ด์ ๋ฒ์ ๋ง๋ค ๋ค๋ฅด๋ค
์ ๋ฆฌ
- ์ฐ๋ฆฌ๊ฐ ๋ฌธ์ ์์ฑํ๋ฉด ๋ฌธ์ ํ๋์ Record๋ก ๋ฐ๊ฟ์ค๋ค๋ ๊ฒ.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฐ Record๋ฅผ ๋ชจ์์ Record๋ฅผ ์ฒ๋ฆฌํด๊ฐ๋ฉด์ ์๋ํ๋ค๋ ์ฌ์ค๋ง ์๋ฉด ๋๋ค.
0.2 Flow Control Statement, Completion record if๋ฌธ์ด๋ผ์ ๋ถ๊ธฐ๋ฅผ ํ ์ ์๋ค๋์ง, loop๊ตฌ๋ถ์ด๋ผ์
๊ณ์ flow๋ฅผ ๋๋ฆด ์ ์๋ flow ์ ์ด๋ฅผ ํ๋ฉด ๋ ์ฝ๋๋ฅผ ์ ํํ๊ฑฐ๋ ๋ ์ฝ๋๋ฅผ ์ํ์ํฌ ์ ์๋ ๊ถํ์ ๊ฐ๊ฒ ๋๋ค.
flow ์ ์ด๋ฅผ ํ ์ ์๋ ๋ฌธ์ record๋ก ๋ฐ๊ฟ๋๋ Completion record๋ก ๋ฐ๋๋ค. completion record์ record๋ฅผ ๋ญ ์ ํํ ์ ์๋์ง flow์ ๊ด์ฌํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ๋ฌธ์ Record์ Completion record๋ก ๋๋๊ณ , Completion record๋ค์ด ์ด๋ค ๋ ์ฝ๋๋ฅผ ์ ํํ ์ง ๊ฒฐ์ ํ๋๋ฐ ์ฌ์ฉํ๋ค.
- ๋ฌธ์ ์ปดํ์ผ๋ฌ์๊ฒ ์ฃผ๋ ํํธ์ผ ๋ฟ์ด๋ผ๊ณ ํ์๋ค.
- if๋ for๋ฌธ์ ์ฐ๋ฉด ๊ฐ์ผ๋ก ํ์๋์ง ์๊ณ Completion record๊ฐ ์ด๋ป๊ฒ ์๋ํ ์ง๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์๊ฒ ์๋ ค์ฃผ๋ ํํธ๊ฐ ๋ ๋ฟ.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ทธ ํํธ๋ฅผ ๋ฐ์์ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฐ flow ํ๋ฆ๋๋ฅผ ๋ง๋๋ completion record๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
์ ๋ฆฌ
- ์ฐ๋ฆฌ๊ฐ ์ง๋ ๋ฌธ ํ๋ํ๋๊ฐ flow๋ฅผ ๊ตฌ์ฑํ๋ค.
- flow controlํ๋ ๋ฌธ๋ค์ ๋ณ๋๋ก ๊ตฌ์ฑํ๋ค.
1. Direct flow control ์ง์ flow controlํ๋ ๋ช ๋ น์ด๋ฅผ ๋ฐฐ์๋ณด์.
1.1 label ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ์ง์ flow control์๋
labelย ์ด ์๋ค. - ๋ค์ค for๋ฌธ์ ์ฌ์ฉํ์ ๋ ๋ฐ๊นฅ์ชฝ for๋ฌธ์ผ๋ก ๋น ์ ธ๋์ค๊ณ ์ถ์ผ๋ฉด, break๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
1.1.1 Identifier (= ์๋ณ์)
์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์ identifier A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters โAโ through โZโ (uppercase) and the characters โaโ through โzโ (lowercase). (์ฐธ๊ณ ย )
- $๋ฅผ ์์ํ ์๋, ํฌํจํ ์๋์๋ค. ๋๋จธ์ง๋ ๋ณ์ ์๋ณ์ ๊ท์น๊ณผ ๊ฐ๋ค.
- ๋ค์
:๋ฅผ ๋ถ์ฌ์ฃผ๋ ์๊ฐ label์ด ๋๋ค.
1.1.2 Scope - label์ ์ด๋ฆ์ ๊ฐ์ ๋ฒ์(scope)๋ด์์ 2๊ฐ๊ฐ ๋์ฌ ์ ์๋ค. - ๋ฐํ์์ ์ค๋ฅ๊ฐ
์กํ์ง ์๊ณ ํ์ฑํ๋ ํ์์ ์ค๋ฅ๊ฐ ๋๋ค. - ์๋ฌ๋ฅผ ์ฌ์ ์ ์ก์ ์ ์๋ ์ฅ์ ์ด ์๋ค.
Label์ scope?
- label์ scope๋ ํจ์๋ก ๊ฒฐ์ ๋๋ค.
- label scope๋ผ๋ ๊ฐ๋
์ด ์๋ค.
- label scope๋ shadowing์ด ์ผ์ด๋๋ค.
<script>
abc: {
console.log("start");
if (true) break;
console.log("end");
}
</script>Uncaught SyntaxError: Illegal break statement
<script>
abc: {
console.log('start');
if (true) break abc;
console.log('end');
}
console.log('test');
</script>start test
- break๋ค์ ๋ช ์๋ label ์ค์ฝํ์ ๋ง์ง๋ง์ผ๋ก jumpํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. => flow ์๋ ์ ์ด์ ์ฑ๊ณต
- label ์ค์ฝํ๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด label ์ค์ฝํ ๋ด์์๋ label์ ๋น ์ ธ๋์ฌ ์ ์๋ ๊ถ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค.
- loop๊ฐ ์๋๋ผ์ continue๋ ์ฌ์ฉํ์ง ๋ชปํ์ง๋ง
break๋ ์ฌ์ฉํ ์ ์๋ค.
- loop๊ฐ ์๋๋ผ์ continue๋ ์ฌ์ฉํ์ง ๋ชปํ์ง๋ง
- ๊ฐ์ฅ ์์ด์ ์ธ flow control
- ์ด ๋ฐฉ๋ฒ์ ํตํด์ label ์น์ ์ ๋ง๋ค๋ฉด label ์น์ ์์ flow control์ด ๊ฐ๋ฅํ๋ค.
label ์์ญ์ด ์๋๊ณณ๋ ๋ ๊น? label ์์ญ์ด ์๋๊ณณ์์ ๋๊ฒ ํ๋ ค๋ฉด label ์์ญ์ ๋๋ ์ค์ผํ๋ค.
1.1.3 Label range - label range๋ฅผ ์ธ์ํ๋ ค๋ฉด label set์ ์ธ์ํ ์ ์์ด์ผํ๋ค. - ์ด๋ป๊ฒ ํด์
label์ด label์์ญ์ ํ๋ณดํ๋์ง ์์์ผ ํ๋ค. 1. ์ด label์์ ๋ค์ label๊น์ง๊ฐ ํ๋์ label range๋ฅผ ์ด๋ฃฌ๋ค. 2. label๋ค์์ iteration์ด ์ค๊ฑฐ๋, switch๊ฐ ์ค๋ฉด ์ด๊ฒ๋ค์ด ๋ค์ label ๋ฒ์๋ฅผ ํ์ ์ง๊ฒ ๋๋ค.
<script>
console.log('0');
abc: if (true) break abc;
console.log('1');
bbb: console.log('2');
</script>0 1 2
-
label range๋ก ํ์ ํ์ง๋ง, jumpํ์ง ๋ชปํ๋ค.
-
goto์ฒ๋ผ ๊ฑด๋๋ฐ๋ ค๋ฉด label ์ค์ฝํ๋ฅผ ์ ์ธํ๋์ง, iteration label์ด ๋๋์ง, switch label์ด ๋๋์ง ํด์ผ์ง jumpํ ์ ์๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ์๋ goto ๊ตฌ๋ฌธ์ด ์๋ค๋ ๊ฒ์ ์ฃผ์. break๋ continue์์๋ง ๋ ์ด๋ธ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ง์ ๋ ์ด๋ธ์ ์ ํํด์ goto๋ ์๋๊ณ break, continue๋ก ์๋๋ก ๋ด๋ ค๊ฐ๋ ๊ฒ๋ง ๊ฐ๋ฅํ๋ค.
-
์๋ค๊ฐ๋ค ํ ์ ์๋ค. label๋ง ๊ฐ๊ณ loop๋ฌธ์ ๋ง๋ค ์ ์๋ค.
-
๋ฐ๋ณต์ ์ธ ์คํ๋ง ํ ์ ์์ ๋ฟ jump์ํฌ ์ ์๋ค.
-
if๋ฌธ์์๋ break ๋ฌธ ๋ค์ label์ ์์ฑํด์ผํ๋๋ฐ, while์ด๋ for๋ฌธ์์๋ label์ ๋ช ์์ ์ผ๋ก ์ฐ์ง์๊ณ break๋ฌธ๋ง ์ธ ์ ์๋ ์ด์ ๋ ๋ฌด์์ผ๊น
<script>
for (var i = 0; i < 10; i++) {
if (i === 5) break;
}
console.log('end');
</script>์ error๊ฐ ์๋๊น?
1.1.4 Auto label
<script>
temp38:
for (var i = 0; i < 10; i++) {
if (i === 5) break temp38;
}
console.log("end");
</script>- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฐ๋ฆฌ ๋์ ์ label์ ์ฝ์
ํด์ค ์
. = auto label
- iteration(for๋ฌธ)์ด๋ switch๋ฌธ ์์์ ๋ฐ๋๋๋ค.
- auto label์ด ๋ง๋ค์ด๋ธ ์ด๋ฆ undefined named label (์ ์์์ temp38๊ฐ์)
cf__1 ์ฃผ์์ ๊นจ๋ํ๊ฒ ์ฐ๊ณ ์ถ๋ค๋ฉด?
- ์์ฃผ์์ ์ฐ๊ธฐ ์ํด์ ์์ ์ฐ๊ธฐ๋ ํ๋ค.
- ์คํ์์ค์ ์ด๋ ๊ฒ ์ฐ์ฌ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ab: console.log('123');
cd: console.log('123');
dc: console.log('123');1.1.5 label์ ํธ์ถ๋์ ๋ ์ฒ์์ผ๋ก๊ฐ๋์? jump๊ตฌ๋ฌธ์ jump๊ฐ ์์ํ๋ ๋ฌธ์ฅ ๋ธ๋ญ์ ๊ฐ์ฅ ์ฒ์์ผ๋ก
๊ฐ๊ฒ ๋์ด์๋ค. - for๋ฌธ์ด ๋ฃจํ๋๋ฉด, ๊ฐ์ฅ ์ฒ์์ผ๋ก ๊ฐ๋ค. - ํจ์ ํธ์ถํ๋ฉด ๊ฐ์ฅ ์ฒ์์ผ๋ก ๊ฐ๋ค. ํ์ง๋ง break์ label๋ฅผ ๋ณธ๋ค๋ฉด.. ์ฒ์์ผ๋ก ๊ฐ์ผํ๋ ๊ฑฐ ์๋๊ฐ?? - break์ label์ ๋ธ๋ญ์ ๋ง์ง๋ง์ผ๋ก ๋ณด๋ธ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ label ์คํ์ ์๋ฐ์ label ์คํ๊ณผ ๋์ผํ๋ค ๋ ์ด๋ธ์ ์๋ฐ์คํฌ๋ฆฝํธ์ 3.1๋ฒ์ ๋๋ถํฐ ์์๋ ์คํ
1.2 Switch switch์ ๋ฌธ๋ฒ์ ์์๋ฅผ ํ์ธํด๋ณด์. - switch๋ผ๋ ํค์๋๊ฐ ๋์ค๊ณ - ๊ดํธ๊ฐ ๋์ค๊ณ -
๊ดํธ ์์ ์์ด๋ค์ด๊ฐ ์ ์๊ณ , - ์ค๊ดํธ๊ฐ ๋์จ๋ค. - for๋ฌธ ๋ค์์ ๊ดํธ๋ ๋จ๋ฌธ์ด ๋์ฌ ์ ์๊ณ ์ค๋ฌธ์ด
๋์ฌ ์ ์๋๋ฐ, ์ค๋ฌธ๋๋ฌธ์ ์ค๊ดํธ๋ฅผ ์ด๋ค. - switch๋ฌธ์ ๊ทธ๋ด ์ ์๋ค. ๋ฌด์กฐ๊ฑด ์ค๊ดํธ๊ฐ ๋์์ผํ๋ค. -
๋ฌธ๋ฒ์ ์ธ ํ ํฐ์ด๋ผ๋ ๋ป์ด๋ค. - switch์ ๋ชธ์ฒด๋ฅผ ๋ํ๋ด๋ ์ ์ฉ ํ ํฐ. - ์ธ์ด ํ์๊ฐ ํด์ํ๊ธฐ ์ํ
ํ ํฐ์ผ๋ก์์ ์ค๊ดํธ์ด๋ค. - ์ ์ค๊ดํธ๋ฅผ ์ธ๊น. switch๋ ์ค๊ดํธ์ ์์ญ์ ํน๋ณํ ์์ญ์ผ๋ก ๋ง๋ ๋ค.
special label block์ผ๋ก ๋ง๋ ๋ค. 1. case 2. ์ 3. ์ฝ๋ก :
1.2.1 Special label Block switch๋ ํน๋ณํ ๋ ์ด๋ธ ์์ญ์ ์ฌ์ฉํ ์ ์๋ ๊ณต๊ฐ์ ๋ง๋ค์ด์ฃผ๋
๋ฌธ๋ฒ์ด๋ผ๊ณ ์๊ฐํด๋ ๋๋ค. - label๊ณผ ์์ ํ ์ผ์นํ๋ค. - ์ปดํ์ผํ์์ ํด์๋๋ ์ ์ ์ธ ๋ ์ด๋ธ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ case ์์ ์์ ๋์ ์ผ๋ก ํด์ํ ์ ์๋ ํน์ํ ๋ ์ด๋ธ๋ก ๋ง๋ค์์ ๋ฟ์ด๋ค. - switch๋ case์ default label๋ง ์ฌ์ฉํ๋๋ก ํ๋ค.
์ฐ๋ฆฌ๋ switch ๊ดํธ์์ ์๋ ๊ฐ์ ํ๊ฐ๋ ๊ฒ์ ๋ฐํ์์ ํ๊ฐํด์ case์ ์๋ ๊ฐ๊ณผ ์ผ์นํ๋ label๋ก ๋ณด๋ผ ์ ์๋ ํน์ํ ๋ ์ด๋ธ ๊ตฌ๋ฌธ์ ๋ง๋ค ์ ์๋ switch๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ ์์ ์๋ label์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ label๊ณผ ๋์ผํ๊ฒ ์๋ํ๋ค.
1.2.2 Fall Through case๋ฌธ ์์์ break๋ฅผ ์์ฐ๋ฉด ๊ทธ ๋ค์ case๋ฌธ์ด ์คํ๋๋ ํ์ - break๋ฅผ ๊ฑธ๋ฉด,
undefined name label๋ก ๋น ์ ธ๋์ค๊ฒ ๋๋ค. - switch๋ฌธ ์์ auto label์ ๋ง๋ ๋ค.
1.2.3 Auto Label
<script>
switch (true) {
default:
console.log("c");
case true:
console.log("0");
case false:
console.log("1");
}
</script>์ธ์ด๋ง๋ค ์คํ์ label block ํด์ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ switch์ ์คํ์ label block์ ์์์ ์๋๋ก ์ฒ๋ฆฌํ๋ค.
- ์๋ฐ๋ c๊ฐ์ ์ธ์ด๋ switch๋ฅผ ์ธ๋ ํด์ํ๋ ๋ฐฉ์์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฅด๋ค.
<script>
temp17: switch (true) {
default:
console.log('c');
case true:
console.log('0');
break temp17;
case false:
console.log('1');
}
console.log('end');
</script>- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด break๋ฌธ ๋ค์ auto label์ ๋ถ์ฌ์ค๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- auto label์ด ๋ฐ์๋๋ ์ง์ ์ iteration(for๋ฌธ)์ด๋ switch๋ฌธ ์์์ ๋ฐ๋๋๋ค.
1.2.4 Runtime switch ์๋ฐ์คํฌ๋ฆฝํธ์ case๋ฌธ์ runtime์ ํด์์ ํ๋ค. - runtime์ ํด์ํ๋
๊ธฐ๋ฅ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก switch๋ฌธ์ ์ธ ์ ์๊ฒ ๋ง๋ ๋ค.
- ๊ฐ์ ๋ํ routing์ผ๋ก (mini router) ํน์ ๊ฐ์ ๋ํ routing table
- ์กฐ๊ฑด ํ๊ฐ์ ๋ํ ๋ถ๊ธฐ
๊ฐ์ ๋ํ routing์ด ์ ์ ์ธ ๊ฒฝ์ฐ ๊ฐ์ ๋ํ routing์ ๋ ์ฐ์ ์์๊ฐ ๋๋ค.
<script>
// 1. mini router
var a = true;
switch (a) {
default:
console.log('c');
case true:
console.log('0');
break;
case false:
console.log('1');
}
console.log('end');
// 2. ์กฐ๊ฑด ํ๊ฐ์ ๋ํ ๋ถ๊ธฐ
// ๋์์ธํจํด chianable responsibility ํจํด
switch (true) {
case network() === 'online':
case network() === 'wifi':
case network() === 'offline':
case localcache():
default: // ์๋ด๋ฌธ..
}
</script>1.2.5 Reverse case switch๊ตฌ๋ฌธ์ด runtime์ ํด์๋๋ค๋ ๊ฒ์ ๋ญ๋? ํ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค. -
switch๋ฌธ์ ๋ผ์ฐํฐ๋ก ์ฌ์ฉํ์ง ์๊ฑฐ๋, ๋ผ์ฐํฐ๋ก ์ฌ์ฉํ๋๋ผ๋ ํจ์๊ฐ ๊ฐ์ ๋๊ฑฐ๋, ์ฆ๊ฐํ์์ฒ๋ผ ์ํ๋ฅผ ๋ฐ๊พธ๋ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ฉด ํญ์ ์ฃผ์ํด์ ์จ์ผํ๋ค. - runtime์์ switch๋ฅผ ํด์ํ๋ ๋ชจ๋ ์ธ์ด์์ ๋ฐ์ํ๋ค. - python, ruby, javaScript - ์ ์๊น์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค.