ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Optional - 1 (Forced Unwrapping, Optional Binding)
    Swift 2022. 2. 14. 23:56

    (๋ชจ๋“  ์ฝ”๋“œ๋Š” Playground์—์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

     

    ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Optional์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค!

     

    ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ์ƒ์ˆ˜์™€ ๋ณ€์ˆ˜๋“ค์€ ๊ฐ’์„ ์„ ์–ธํ•œ ํ›„ ์ดˆ๊ธฐํ™”๋ฅผ ํ–ˆ์—ˆ๋‹ค. ์ฆ‰, ๋ชจ๋‘ ๊ฐ’์ด ์กด์žฌํ–ˆ์—ˆ๋‹ค. 

    ์ด๋ ‡๊ฒŒ ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ๋“ค์„ Non-Optional ์ด๋ผ๊ณ  ํ•œ๋‹ค.

     

    ๊ทธ๋ ‡๋‹ค๋ฉด Swift์—์„œ ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

    ๋ฐ”๋กœ Optional์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

     

    Type?

     

    Optional์€ ์ž๋ฃŒํ˜•์˜ ํƒ€์ž… ๋’ค์— ?๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, Optional์ด๋ผ๋Š” ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๊ฐ’์„ ๊ฐ€์ ธ๋„ ๋˜๊ณ , ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

    ๊ฐ’์ด ์—†์Œ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” nil์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๊ณง ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

    let optionalVal: String? = nil

     

    ์•„๋ž˜ ์ฝ”๋“œ๋Š” Non-Optional ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๊ฐ’์„ ๊ฐ€์ ธ์•ผํ•˜๊ณ , nil์„ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

    ๋ฐ˜๋ฉด, ์•„๋ž˜ ์ฝ”๋“œ๋Š” Optional ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , nil์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    nil์€ ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜•์‹ ์ถ”๋ก ์„ ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ nil์„ ์ €์žฅํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ Type Annotation (ํƒ€์ž… ์ง€์ •)์„ ๊ผญ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค!

     

    Optional ํƒ€์ž…์„ ๊ฐ€์ง„ optionalVal์ด๋ผ๋Š” ์ƒ์ˆ˜์— 1์„ ์ €์žฅํ•œ ํ›„์— 2๋ฅผ ๋”ํ•ด๋ณด์ž.

    ๊ทธ๋Ÿฌ๋ฉด Optional ํƒ€์ž… (Int?)์€ ๋ฌด์กฐ๊ฑด Int๋กœ unwrapped ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์ด์ฒ˜๋Ÿผ, Optional ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ์ถ”์ถœ (unwrapping)ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

     

    ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Forced Unwrapping๊ณผ Optional Binding์ด ์žˆ๋Š”๋ฐ, ๋จผ์ € Forced Unwrapping์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

     

     

    1. Forced Unwrapping (๊ฐ•์ œ ์ถ”์ถœ)

    Forced Unwrapping (๊ฐ•์ œ ์ถ”์ถœ)์€ ๊ฐ•์ œ ์ถ”์ถœ ์—ฐ์‚ฐ์ž (Forced Unwrapping Operator) !๋ฅผ Optional ํ‘œํ˜„์‹ ๋’ค์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค.

    Optional ํ‘œํ˜„์‹์„ unwrappingํ•˜๋ฉด Non-Optional ํƒ€์ž…์œผ๋กœ ๊ฐ’์ด ๋ฆฌํ„ด๋œ๋‹ค.

     

    ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

    num์€ Optional Int์ด๊ณ , ํ˜„์žฌ nil ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

    num์— 0์„ ์ €์žฅํ•œ ํ›„์— ์ด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด, ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” Optional(0)์ด๋‹ค.

     

    num์„ ๊ฐ•์ œ ์ถ”์ถœํ•œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” Optional(0)์ด ์•„๋‹ˆ๋ผ 0์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๊ฐ•์ œ ์ถ”์ถœ ๊ฒฐ๊ณผ์˜ ์ž๋ฃŒํ˜•์€ ๊ฐ•์ œ ์ถ”์ถœ ์ „์˜ Optional์—์„œ Optional์„ ์ œ์™ธํ•˜๊ณ  ๊ฐ™๋‹ค.

    String?์„ ์ถ”์ถœํ•˜๋ฉด String์ด, Int?๋ฅผ ์ถ”์ถœํ•˜๋ฉด Int๊ฐ€, Double?์„ ์ถ”์ถœํ•˜๋ฉด Double๋กœ ๊ฐ’์ด ์ถ”์ถœ๋œ๋‹ค.

     

    ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ newNum์— ์•ž์„œ ์ €์žฅํ–ˆ๋˜ ๊ฐ’ num์„ ์ €์žฅํ•˜๊ณ  ๊ฐ•์ œ ์ถ”์ถœํ•˜์—ฌ ํƒ€์ž…์„ ํ™•์ธํ•ด๋ณด๋ฉด Int ํ˜•์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Int?๊ฐ€ Int๋กœ ์ถ”์ถœ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ๊ทธ๋ ‡๋‹ค๋ฉด, ๋งŒ์•ฝ nil์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ๊ฐ’์„ unwrapping ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

    ๊ฐ’์— nil์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ๊ฐ•์ œ ์ถ”์ถœ์„ ์‹œ๋„ํ•˜๋ฉด crash๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    ๋”ฐ๋ผ์„œ Forced Unwrapping์„ ํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

     

    ๊ทธ๋ ‡๋‹ค๋ฉด, ๊ฐ’์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

    ๊ฐ’์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ Optional Binding์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

     

    2. Optional Binding

    Optional Binding์€ Optional์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, Optional ํ‘œํ˜„์‹์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ์ƒ์ˆ˜์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

    Optional ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•œ ํ›„์— ๊ทธ ๊ฐ’์ด nil์ด๋ผ๋ฉด ๋ฐ”์ธ๋”ฉ์— ์‹คํŒจํ•˜๊ณ , nil์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ”์ธ๋”ฉ์— ์„ฑ๊ณตํ•œ๋‹ค.

     

    Optional Binding์€ ์•„๋ž˜์™€ ๊ฐ™์ด if, while, guard์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

    ์—ฌ๊ธฐ์„œ Type์€ Optional ํ‘œํ˜„์‹์— ์˜ํ•ด ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

    ๋ฐ”์ธ๋”ฉ ์„ฑ๊ณต ์‹œ if ๋ฌธ์€ if ๋ธ”๋ก์ด, while ๋ฌธ์€ ๋ฐ˜๋ณต๋ฌธ์ด, guard ๋ฌธ์€ else ๋ธ”๋ก ๋‹ค์Œ์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

    ๋ฐ”์ธ๋”ฉ ์‹คํŒจ ์‹œ if ๋ฌธ๊ณผ while ๋ฌธ์€ ๋‹ค์Œ ๋ธ”๋ก์œผ๋กœ ์ œ์–ด๋ฅผ ๋„˜๊ธฐ๊ณ , guard ๋ฌธ์€ else ๋ธ”๋ก์„ ์‹คํ–‰ํ•œ๋‹ค.

     

     

    ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

    myMood์˜ ๊ฐ’์ด mood์— ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— if ๋ฌธ ๋ธ”๋ก์ด ์‹คํ–‰๋˜๊ณ , "I am Happy"๋ผ๋Š” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์—์„œ ๋ฐ”์ธ๋”ฉ์„ ์—ฌ๋Ÿฌ ๊ฐœ ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.