-
[Swift] Loop Statements (for-in, while) (๋ฐ๋ณต๋ฌธ)Swift 2022. 1. 11. 23:15
(๋ชจ๋ ์ฝ๋๋ Playground์์ ์์ฑ๋์์ต๋๋ค.)
Swift์ ๋ฐ๋ณต๋ฌธ์๋ for-in ๋ฌธ, while ๋ฌธ์ด ์๋ค.
1. for-in ๋ฌธ
for-in ๋ฌธ์ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.

for-in ๋ฌธ์ ๋ฒ์๋ฅผ ์ง์ ํด์ ๋ฐ๋ณตํ๋ ๊ฒ์ผ๋ก, item์๋ ๋ฐ๋ณต ํ์ฐจ์ ํด๋นํ๋ ๊ฐ์ธ ๋ฐ๋ณต ์์ (Loop Constant)๊ฐ ๋ค์ด๊ฐ๋ค.
items๋ ๋ฐ๋ณต ์์์ ๋ฒ์๊ฐ ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต ์์์ ๋ฐ๋ณต ์์์ ๋ฒ์ ํํ์์ ๊ตฌ์ฑํ๋ lowerBound, upperBound์ ํ์์ ๋์ผํ๋ค.
์๋ ์ฝ๋๋ sum์ด๋ผ๋ ๋ณ์์ 1๋ถํฐ 10๊น์ง์ ์ซ์๋ฅผ ๋ํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.

๋ ๋ค๋ฅธ ์์๋ฅผ ์ดํด๋ณด์.
์๋ ์ฝ๋๋ print๋ฌธ์ 3๋ฒ ์ถ๋ ฅํ๋ ์ฝ๋์ธ๋ฐ, ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ฝ์ด๋ณด๋ฉด ๋ฐ๋ณต ์์ i๋ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋์ฒดํ๊ฑฐ๋ '_' ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ํ๋ค.

์ด์ฒ๋ผ '_'๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ผ๋์นด๋ ํจํด (Wildcard Pattern)์ด๋ผ๊ณ ํ๋ค.

Wildcard Pattern (_)์ ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋ฐ๋ณต ์์๋ฅผ ์ฌ์ฉํ์ง ์์ ๋ ๋ฐ๋ณต ์์๋ฅผ ์๋ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์์ผ๋์นด๋ ํจํด์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ , ๋ฐ๋ณต ์์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ๊ฒ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ํ ์ ์ฝ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ํ for-in stride ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
์๋ ์์๋ 1๋ถํฐ 10๊น์ง์ ์ซ์ ์ค ํ์๋ง ์ถ๋ ฅ์ํค๋ ์ฝ๋์ด๋ค.

์ฝ๋ 
์คํ๊ฒฐ๊ณผ from์๋ ์์ ๊ฐ (lowerBound)์ด, to์๋ ์ข ๋ฃ ๊ฐ (upperBound)์ด ๋ค์ด๊ฐ๋ค.
์ด ๋, ์ข ๋ฃ ๊ฐ์ ๋ฒ์์ ํฌํจ๋์ง ์๊ณ (to - 1)๊น์ง๊ฐ ๋ฒ์์ ํฌํจ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต ์์๋ฅผ by ๊ฐ๋งํผ ์ฆ๊ฐ์ํจ๋ค.์๋ for ๋ฌธ์ ์ฌ์ฉํ๋ฉด for ๋ฌธ ๋ด์์ i์ ๊ฐ์ +2์ฉ ์ฆ๊ฐ์ํค๊ฑฐ๋, for๋ฌธ์ 10๋ฒ ๋ฐ๋ณตํ์ฌ i๊ฐ 2๋ก ๋๋ ์ง๋ ์์ธ์ง ํ์ธํด์ผํ๋๋ฐ for-in stride๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต ํ์๋ฅผ ์ค์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ for-in stride๋ฌธ์์๋ ReversedCollection์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ฒ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ํ๋ผ ์ ์๋๋ฐ,
์๋์ ๊ฐ์ด lowerBound๊ฐ์ upperBound๋ณด๋ค ํฌ๊ฒ ์ค์ ํ ์๋ ์๋ค.

์ฝ๋ 
์คํ๊ฒฐ๊ณผ for-in stride ๋ฌธ์ ํฌ๊ฒ stride(from:to:by)์ stride(from:through:by)์ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
stride(from:to:by)์ ๋ฒ์๋ from ~ (to -1)์ด์ง๋ง, stride(from:through:by)์ ๋ฒ์๋ from ~ through ๋ผ๋ ๊ฒ์ ์์๋์!



์์ ์์๋ฅผ ๋ณด๋ฉด
stride(from:to:by)๋ ๋ฒ์์ 10์ด ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ 8๊น์ง๋ง ์ถ๋ ฅ์ด ๋์๊ณ ,
stride(from:through:by)๋ ๋ฒ์์ 10์ด ํฌํจ๋๊ธฐ ๋๋ฌธ์ 10๊น์ง ์ถ๋ ฅ์ด ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
for ๋ฌธ์ ์ด์ฉํ๋ฉด Collection์ ํฌํจ๋ ์์๋ค์ ์ด๊ฑฐํ ์ ์๋๋ฐ,
์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.

2. while ๋ฌธ
while ๋ฌธ์ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.

while๋ฌธ์ ์กฐ๊ฑด์ ํ๋จํ ํ์ ์ฝ๋๋ฅผ ์คํํ๋ค.
์กฐ๊ฑด์ด ์ฐธ์ธ ๋์ ๊ณ์ ๋ฐ๋ณต๋ฌธ ๋ด์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์, ๋ฌดํ ๋ฃจํ์ ๋น ์ง์ง ์๋๋ก ์กฐ๊ฑด์ ์ ์ค์ ํด์ฃผ์ด์ผํ๋ค.
1๋ถํฐ 10๊น์ง์ ํฉ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ while ๋ฌธ์ ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.

์ฝ๋๋ฅผ ๋จผ์ ์คํํ๊ณ ๋์ ์กฐ๊ฑด์ ํ๋จํ๋ while ๋ฌธ๋ ์๋๋ฐ, ์ด๋ฅผ repeat-while ๋ฌธ์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ์กฐ๊ฑด์ ๋จผ์ ํ๋จํ ๊ฒฝ์ฐ์๋ while ๋ฌธ, ์ฝ๋๋ฅผ ๋จผ์ ์คํํ ํ์ ์กฐ๊ฑด์ ํ๋จํ ๊ฒฝ์ฐ์๋ repeat-while ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ ์์๋ฅผ ๋ณด์.


์ผ์ชฝ : while ๋ฌธ / ์ค๋ฅธ์ชฝ : repeat-while ๋ฌธ ์ผ์ชฝ์ ์ฝ๋๋ while ๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ด๊ณ , ์ค๋ฅธ์ชฝ์ ์ฝ๋๋ repeat-while ๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์ผ์ชฝ์ while ๋ฌธ์ num์ด 10์ด๊ธฐ ๋๋ฌธ์, ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด ๋์ด while ๋ฌธ ๋ด์ ์ฝ๋๊ฐ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ num์ ๊ฐ์ ๊ทธ๋๋ก 10์ด๋ค.
์ค๋ฅธ์ชฝ์ repeat-while๋ฌธ์ num์ด 10์ด์ง๋ง, ์ฝ๋๋ฅผ ๋จผ์ ์คํํ๊ณ ์กฐ๊ฑด์ ํ๋จํ๊ธฐ ๋๋ฌธ์ num์ ๊ฐ์ 11์ด๋ค.
์ ๋ฆฌ
for ๋ฌธ์ Range์ Collection์์ ์ฌ์ฉํ ์ ์๊ณ , ๋ฐ๋ณต ํ์๋ฅผ ์์ธกํ ์ ์๋ค.
while ๋ฌธ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ๋ณตํ์๊ฐ ๊ฒฐ์ ๋๊ณ , ๋ฐ๋ณต๋ฌธ์ด ๋ฌดํ ๋ฃจํ์ ๋น ์ง์ง ์๊ฒ ํ๊ธฐ ์ํด์ ์กฐ๊ฑด์ด ํน์ ์์ ์ false๊ฐ ๋๋์ง๋ฅผ ํ์ธํด์ผํ๋ค.
๋ฐ๋ผ์ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์!
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ด๋ฆ ์ ์ ๊ท์น (Naming Convention) (0) 2022.01.13 [Swift] Control Transfer Statements (break, continue) (์ ์ด ์ ๋ฌ๋ฌธ) (0) 2022.01.12 [Swift] Conditional Statements (if, switch, guard) (์กฐ๊ฑด๋ฌธ) (0) 2022.01.10 [Swift] CustomStringConvertible (0) 2022.01.10 [Swift] Range Operator (๋ฒ์ ์ฐ์ฐ์) (0) 2022.01.09