-
[Swift] Control Transfer Statements (break, continue) (์ ์ด ์ ๋ฌ๋ฌธ)Swift 2022. 1. 12. 23:50
(๋ชจ๋ ์ฝ๋๋ Playground์์ ์์ฑ๋์์ต๋๋ค.)
์ด๋ฒ ํฌ์คํ ์์๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์์ ์ฝ๋์ ํ๋ฆ์ ๋ฐ๊พธ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ ์ด ์ ๋ฌ๋ฌธ (Control Transfer Statements)์ ๋ํด ๊ณต๋ถํด๋ณด๊ณ ์ ํ๋ค.
Control Transfer์ ์ ์ด๋ฅผ ์ ๋ฌํ๋ค๋ ๊ฒ์ธ๋ฐ,
์ด ๋ง์ ๊ณง ํ์ฌ ์คํ ์ค์ธ Scope์์์ ์ฝ๋๋ฅผ ์ค์งํ๊ณ , ๋ค์ ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ๋ค๋ ์๋ฏธ์ด๋ค.
Control Transfer Statements์๋ break, continue, fallthrough, return, throw๊ฐ ์๋๋ฐ, ์ฌ๊ธฐ์๋ break์ continue์ ๋ํด์ ์์๋ณด์.
1. break
break๋ฌธ์ ๋ฐ๋ณต๋ฌธ๊ณผ switch๋ฌธ์์ ์ฌ์ฉ๋๋ค.
break๋ฌธ์ ์ฌ์ฉํ๋ฉด ํ์ฌ ์คํ ์ค์ธ scope๊ฐ ์ข ๋ฃ๋๊ณ , ์ด์ด์ง๋ ๋ค์ ๋ฌธ์ฅ์ผ๋ก ์ ์ด๊ฐ ์ ๋ฌ๋๋ค.
์๋ ์ฝ๋๋ ๊ตฌ๊ตฌ๋จ์ 2๋จ๋ถํฐ 9๋จ๊น์ง ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค.

๊ทธ๋ ๋ค๋ฉด ์๋์ ๊ฐ์ด break๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น?


๋ฐ๋ณต ์์๊ฐ i์ธ for ๋ฌธ์ ์ด 1๋ฒ ์คํ๋๋๋ฐ, ๋ฐ๋ณต ์์๊ฐ j์ธ for ๋ฌธ์ 9๋ฒ ์คํ๋๊ณ ๋ ํ์์ผ break ๋ฌธ์ ์ํด for ๋ฌธ์ด ์ข ๋ฃ๋๋ค.
i = 2์ผ ๋ j = 1 ~ 9๋ฅผ ๋ฐ๋ณตํ๊ณ ๋๋ฉด, i = 3์ด ์คํ๋์ง ์๊ณ ๋ฐ๋ก for ๋ฌธ์ด ์ข ๋ฃ๋๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๊ตฌ๊ตฌ๋จ์ด 2๋จ๋ง ์ถ๋ ฅ๋๊ณ , ์ด์ด์ง๋ ๋ฌธ์ฅ์ธ "์ถ๋ ฅ ์๋ฃ"๊ฐ ์คํ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด break ๋ฌธ์ ์์น๋ฅผ ๋ฐ๊พธ๋ฉด ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น?


์ ์ฝ๋๋ i = 2์ผ ๋, j = 1์ด ์ ๋ฌ๋๊ณ break ๋ฌธ์ ์ํด ๋ฐ๋ณต ์์ j์ for ๋ฌธ์ด ์ข ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๊ณ i = 3์ผ ๋ j = 1, i = 4์ผ ๋ j = 1, ... , i = 8์ผ ๋ j = 1, i = 9์ผ ๋ j = 1์ด ์คํ๋๋ค.
๋ฐ๋ณต ์์๊ฐ i์ธ for ๋ฌธ์ ์ด 9๋ฒ ์คํ๋๊ณ , ๋ฐ๋ณต ์์๊ฐ j์ธ for ๋ฌธ์ i์ ๋์ํ์ฌ 1๋ฒ๋ง ์คํ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๊ตฌ๊ตฌ๋จ์ด 2๋จ๋ถํฐ 9๋จ๊น์ง ์ฒซ๋ฒ์งธ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ๋๊ณ , ์ด์ด์ง๋ ๋ฌธ์ฅ์ธ "์ถ๋ ฅ ์๋ฃ"๊ฐ ์คํ๋๋ค.
์ด๋ ๊ฒ break ๋ฌธ์ ํ์ฌ ์คํ ์ค์ธ ๋ฌธ์ฅ์ ์ข ๋ฃํ๊ณ ์ด์ด์ง๋ ๋ค์ ๋ฌธ์ฅ์ ํธ์ถํ๋๋ฐ,
๋ง์ฝ ์์ ๊ฐ์ด ๋ฌธ์ฅ์ด ์ค์ฒฉ๋์ด ์๋ค๋ฉด, ๊ฐ์ฅ ์ธ์ ํ ๋ฌธ์ฅ (๋ฐ๋ณต๋ฌธ)์ ์ค์ง์ํจ๋ค.
switch ๋ฌธ์์๋ break ๋ฌธ์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์กฐ๊ฑด์ ๋ฐ๋ผ์ switch ๋ฌธ์ ์ข ๋ฃํ ๋ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์ฝ๋ ๋ด์์ ์ด๋ค ๋ช ๋ น๋ ์คํํ ํ์๊ฐ ์๋ค๋ฉด break๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.

2. continue
continue ๋ฌธ์ ๋ฐ๋ณต๋ฌธ์์ ์ฌ์ฉ๋๋ค.
continue๊ฐ ํธ์ถ๋๋ฉด, ํ์ฌ ์คํ์ค์ธ ๋ฐ๋ณต์ ์ข ๋ฃํ๊ณ ๋ค์ ํ์ฐจ์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ฉฐ, break ๋ฌธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฅ ์ธ์ ํ ๋ฌธ์ฅ์ ์ํฅ์ ์ค๋ค.
์๋ ์ฝ๋๋ i๊ฐ ์ง์์ผ ๊ฒฝ์ฐ continue ๋ฌธ์ ํธ์ถํ๊ณ , ํ์์ผ ๊ฒฝ์ฐ์๋ ๊ตฌ๊ตฌ๋จ์ ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค.


์คํ ๊ฒฐ๊ณผ๊ฐ ๊ธธ์ด์ ์ผ์ผํ ๋ค ์บก์ณํ์ง๋ ๋ชปํ์ง๋ง, ํ์์ผ ๋๋ง ๊ตฌ๊ตฌ๋จ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ๊ฐ์ฅ ์ธ์ ํ ๋ฌธ์ฅ์ ์ค์งํ๋ ๊ฒ ๋ง๊ณ , ์ํ๋ ๋ฌธ์ฅ์ ์ง์ ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ์ ์์๊น?
๋น์ฐํ ์๋ค. ๋ฐ๋ก Labeled Statements๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค!
Labeled Statements๋ ๋ง ๊ทธ๋๋ก ๋ฌธ์ฅ์ ์ด๋ฆ์ ๋ถ์ฌ์ ์ ์ด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ผ๋ก, ๋ฐ๋ณต๋ฌธ, if ๋ฌธ, switch ๋ฌธ์์ ์ฌ์ฉํ๋ค.
์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ์ธ์ ํ ๋ฌธ์ฅ์ด ์๋, ๋์ผํ Label์ ๊ฐ์ง ๋ฌธ์ฅ์ ์ ์ดํ๊ฒ ๋๋ค.
Labeled Statements๋ ์๋์ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Label: statement break Label continue Label์์์ ์ฌ์ฉํ๋ ๊ตฌ๊ตฌ๋จ ์์ ์ด๋ค. ์ด ์ฝ๋๋ "GugudanOnlyOne"์ด๋ ๋ผ๋ฒจ์ ๊ฐ์ง ๋ฌธ์ฅ์ ์ ์ดํ๋ค.

๋ฐ๋ผ์ ์ด ์ฝ๋๋ i = 2์ผ ๋ j = 1์ด ์คํ๋๊ณ , ๋ฐ๋ก break GugudanOnlyOne์ ์ํด์ ๋ฐ๋ณต ์์ i๋ฅผ ๊ฐ์ง for ๋ฌธ์ด ์ข ๋ฃ๋๋ค. ์ฆ, ๋ชจ๋ ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ๋ค.

'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Objected Oriented Programming in Swift (raywenderlich ๋ฒ์ญ) (0) 2022.01.13 [Swift] ์ด๋ฆ ์ ์ ๊ท์น (Naming Convention) (0) 2022.01.13 [Swift] Loop Statements (for-in, while) (๋ฐ๋ณต๋ฌธ) (0) 2022.01.11 [Swift] Conditional Statements (if, switch, guard) (์กฐ๊ฑด๋ฌธ) (0) 2022.01.10 [Swift] CustomStringConvertible (0) 2022.01.10