-
[Swift] Range Operator (๋ฒ์ ์ฐ์ฐ์)Swift 2022. 1. 9. 22:22
(๋ชจ๋ ์ฝ๋๋ Playground์์ ์์ฑ๋์์ต๋๋ค.)
์ด๋ฒ์๋ ๋ฒ์๋ฅผ ๋ํ๋ผ ๋ ์ฌ์ฉํ๋ ๋ฒ์ ์ฐ์ฐ์ (Range Operator)์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค!
Range Operator๋ ์ฃผ๋ก ๋ฐ๋ณต๋ฌธ์ด๋ ์ปฌ๋ ์ ์์ ๋ง์ด ์ฌ์ฉ์ด ๋๋๋ฐ,
๋จผ์ lowerBound์ upperBound์ ๋ํด์ ์์์ผํ๋ค.
lowerBound๋ ์์๊ฐ์ ์๋ฏธํ๊ณ , upperBound๋ ์ข ๋ฃ๊ฐ์ ์๋ฏธํ๋ค.
๋ํ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, lowerBound๋ ํญ์ upperBound๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผํ๋ค.
Range Operator๋ Closed Range Operator์ Half-Open Range Operator์ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
Closed Range Operator๋ upperBound๊ฐ ๋ฒ์์ ํฌํจ๋๋ ๋ฐ๋ฉด์, Half-Open Range Operator๋ upperBound๊ฐ ๋ฒ์์ ํฌํจ๋์ง ์๋๋ค.
์ฆ, Closed Range Operator๋ (lowerBound ~ upperBound) ๊น์ง์ ๋ฒ์๋ฅผ ์์ฑํ๊ณ ,
Half-Open Range Operator๋ (lowerBound ~ upperBound - 1) ๊น์ง์ ๋ฒ์๋ฅผ ์์ฑํ๋ค.
Closed Range Operator
Closed Range Operator๋ ์์ ๋งํ ๊ฒ๊ณผ ๊ฐ์ด lowerBound์ upperBound๋ฅผ ํฌํจํ๋ค.
1 ... 5 // Closed Range Operator (1 ~ 5) 1...5์์ ์ฝ๋๋ 1๋ถํฐ 5๊น์ง์ ๋ฒ์๋ฅผ ๋ํ๋ด๋๋ฐ,
Closed Range Operator๋ ์ฐ์ฐ์ ์ ์์ ๋ชจ๋ ๊ณต๋ฐฑ์ด ์๊ฑฐ๋, ์ ์์ ๊ณต๋ฐฑ์ด ๋ชจ๋ ์์ด์ผํ๋ค.
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฐ์ฐ์ ์ ์์ด ์๋ ํ ์ชฝ์๋ง ๊ณต๋ฐฑ์ด ์กด์ฌํ๋ค๋ฉด, ์ดํญ ์ฐ์ฐ์๋ก ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๊ฒ ๋๋ค. ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๋ฉด ์ฐ์์ ์ธ ๋ฌธ์ฅ์ ';'๋ก ๋ถ๋ฆฌ๋์ด์ผํ๋ค๊ณ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๊ทธ๋ ๋ค๋ฉด, ๋ง์ฝ 1๋ถํฐ 5๊ฐ ์๋ 5๋ถํฐ 1์ ๋ฒ์๋ก ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์์ ๋งํ ๊ฒ์ฒ๋ผ, lowerBound๋ ํญ์ upperBound๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผํ๊ธฐ ๋๋ฌธ์, 5 ... 1๋ก ๋ฒ์๋ฅผ ์ค์ ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๋ฐ๋ผ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฒ์๋ฅผ ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด, ReversedCollection์ ์ฌ์ฉํด์ผํ๋ค.
(1 ... 5).reversed() ์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.

for-in ๋ฌธ์ ํตํด ์ค์ ๋ก ๊ฐ์ด 5๋ถํฐ 1๊น์ง ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.

์ฝ๋ 
์ถ๋ ฅ ๊ฒฐ๊ณผ ์ดํญ ์ฐ์ฐ์ ๋ฟ๋ง ์๋๋ผ ๋จํญ ์ฐ์ฐ์์์๋ Closed Range Operator๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ด ๋๋ ํผ์ฐ์ฐ์์ ๊ณต๋ฐฑ ์์ด ๋ถ์ฌ์ ์จ์ผ ํ๋ค.
์๋์ ๊ฐ์ด ๋ฐฐ์ด์์ ํ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ด ๋ lowerBound ๋๋ upperBound ์ค์ ํ๋๋ง ์ค์ ํด์ค๋ค๋ฉด ๋๋จธ์ง ๊ฒฝ๊ณ๊ฐ์ ์๋์ผ๋ก ์ค์ ๋๋ค.

๋ฌผ๋ก , ์ดํญ ์ฐ์ฐ์์์ ์ฌ์ฉํ๋ค๋ฉด ์ฐ์ฐ์ ์ ์์ ๊ณต๋ฐฑ์ด ์์ด๋ ๋๋ค.
Half-Open Range Operator
Half-Open Range Operator๋ upperBound๊ฐ ๋ฒ์์ ํฌํจ๋์ง ์๋๋ค.
1 ..< 5 // Half-Open Range Operator (1 ~ 4) 1..<5์์ ์ฝ๋๋ 1๋ถํฐ 4๊น์ง์ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค. ์ฆ 5๊ฐ ํฌํจ๋์ง ์๋๋ค.
Half-Open Range Operator ๋ํ ์ฐ์ฐ์ ์ ์์ ๋ชจ๋ ๊ณต๋ฐฑ์ด ์๊ฑฐ๋, ์ ์์ ๊ณต๋ฐฑ์ด ๋ชจ๋ ์์ด์ผํ๋ค.
๋ง์ฝ Half-Open Range Operator์์ lowerBound์ upperBound์ ๋ ์ค์ ํ๋๋ฅผ ์๋ตํ๋ค๋ฉด, ์ฐ์ฐ์ ์์ ๊ณต๋ฐฑ์ด ์์ด์๋ ์๋๋ค!
๊ณต๋ฐฑ์ด ์๋ค๋ฉด ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๋จํญ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ๋ถ๋ฆฌ๋์๋ ์๋๋ค๋ ๊ฒ์ด๋ค.

Half-Open Range Operator๋ ์๋์ ๊ฐ์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์๋ ์ฝ๋๋ lowerBound๋ฅผ ์ค์ ํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ Int์ ์ต์๊ฐ๋ถํฐ 4๊น์ง ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.

์ถ๊ฐ์ ์ผ๋ก, for๋ฌธ์์ upperBound์ ์๋ต๊ณผ ๊ฐ์ด ๋จํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ ์์ผ๋ฏ๋ก ๋ฐ๋์ ๊ณ ์ ๋ ๋ฒ์์์ ์ฌ์ฉํด์ผํ๋ค๋ ์ ์ ์์ง๋ง์!
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Conditional Statements (if, switch, guard) (์กฐ๊ฑด๋ฌธ) (0) 2022.01.10 [Swift] CustomStringConvertible (0) 2022.01.10 [Swift] ๋จ๋ฝ ํ๊ฐ (Short-circuit Evaluation) (0) 2022.01.07 [Swift] ์ฐ์ฐ์ (Operator) (0) 2022.01.06 [Swift] Type Inference, Type Annotation (0) 2022.01.05