๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Swift ์ •๋ฆฌ

[Swift] Optional(์˜ต์…”๋„) ์ •๋ฆฌ

by seolhee2750 2021. 6. 6.

์Šค์œ„ํ”„ํŠธ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ ?, ๊ทธ๋ฆฌ๊ณ  ! ์ด๋Ÿฐ ๋ฌธ์žฅ ๋ถ€ํ˜ธ๋“ค์ด ๋“ฑ์žฅํ•œ๋‹ค.

์˜ค๋Š˜์€ ๊ทธ ์ค‘ ?์— ๋Œ€ํ•ด ๋จผ์ € ์„ค๋ช…ํ•ด ๋ณด๋ ค ํ•œ๋‹ค.

 

๐Ÿ“Ž ์˜ต์…”๋„

์Šค์œ„ํ”„ํŠธ๊ฐ€ ๊ฐ€์ง€๋Š” ๋Œ€ํ‘œ์ ์ธ ํŠน์ง•์œผ๋กœ ์•ˆ์ „์„ฑ์ด ์žˆ๋‹ค. ์˜ต์…”๋„์€ ๋ฐ”๋กœ ์•ˆ์ „์„ฑ์„  ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ!

 

์šฐ๋ฆฌ๊ฐ€ String, Int, Double ๋“ฑ ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…์„ ์ง€์ •ํ•  ๋•Œ,

์Šค์œ„ํ”„ํŠธ์˜ ํƒ€์ž…๋“ค์€ ๋ชจ๋‘ nil์ด ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ž ๊น, nil์ด๋ž€?

nil์€ '๊ฐ’์ด ์—†์Œ'์„ ๋œปํ•œ๋‹ค. 0๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…!

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด "์‚ฌ๊ณผ"๋Š” ์ •ํ™•ํžˆ ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ž์—ด ""๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์ผ๊นŒ?

์•„๋‹ˆ๋‹ค. ""๋„ ๊ฐ’์ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋ฉฐ, ๊ฐ’์ด ์—†๋Š” ๋ฌธ์ž์—ด์€ ๋ฐ”๋กœ nil์ด๋‹ค.

(nil์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ๐Ÿ‘‡๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

2021.06.07 - [๐Ÿ“ Swift Note] - [Swift] nil ์ •๋ฆฌ (feat.NULL)

 

[Swift] nil ์ •๋ฆฌ (feat.NULL)

์Šค์œ„ํ”„ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  nil์ด๋ž€ ๋‹จ์–ด๋ฅผ ์ฒ˜์Œ ๋“ค์–ด๋ดค๋Š”๋ฐ, ๊ทธ๋ƒฅ NULL์ด๋ž‘ ๋น„์Šทํ•ด๋ณด์˜€๋‹ค,, ๊ทผ๋ฐ ์ž์„ธํžˆ ์ฐพ์•„๋ณด๋‹ˆ NULL๊ณผ๋Š” ์—„์—ฐํžˆ ๋‹ค๋ฅธ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ,,์ด๋ผ๋Š”,,,, ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” NULL๊ณผ์˜ ์ฐจ์ด

seolhee2750.tistory.com

 

์˜ต์…”๋„์€ ์ง์—ญํ•˜๋ฉด '์„ ํƒ์ ์ธ'์ด๋ผ๋Š” ๋œป์ด ๋˜๋Š”๋ฐ,

๋ง ๊ทธ๋Œ€๋กœ ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ๊ณ (nil), ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์˜ต์…”๋„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

๐Ÿ‘‰ nil์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ต์…”๋„ ํ•„์ˆ˜!

๐Ÿ‘‰ ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๊ธฐ์— ๋‹น์—ฐํžˆ, ์˜ต์…”๋„์ธ ํƒ€์ž…๊ณผ ๊ทธ๋ƒฅ ํƒ€์ž…์€ ์•„์˜ˆ ๋‹ค๋ฅธ ํƒ€์ž…!! (Int! != Int)

 

var test: Int?

์ด๊ฒŒ ๋ฐ”๋กœ ์˜ต์…”๋„์˜ ์‚ฌ์šฉ ๋ชจ์Šต์ด๋‹ค.

์•„๋ž˜์—์„œ ์ข€ ๋” ์ž์„ธํžˆ ๋ณด์ž.


์œ„์™€ ๊ฐ™์ด ์˜ต์…”๋„์„ ์ ์šฉํ•œ ์ž๋ฃŒํ˜•์„ Optional Type์ด๋ผ๊ณ  ํ•˜๊ณ ,

์ ์šฉ๋˜์ง€ ์•Š์€ ํƒ€์ž…์„ Non-Optional Type์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ“Ž Non-Optinoal Type

๋…ผ ์˜ต์…”๋„ ํƒ€์ž…์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

var test: Int
var test = 1

์ด๋ ‡๊ฒŒ!

Type Annotation์ด๋‚˜ Type Inference๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ชจ์Šต.

(Type Annotation, Inference์— ๋Œ€ํ•œ ๊ธ€์€ ์—ฌ๊ธฐ๐Ÿ‘‡๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

2021.06.11 - [๐Ÿ“ Swift Note/๐Ÿ“‹ Concept Summary] - [Swift] Type Annotation๊ณผ Type Inference (ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํƒ€์ž… ์ถ”๋ก )

 

[Swift] Type Annotation๊ณผ Type Inference (ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํƒ€์ž… ์ถ”๋ก )

์Šค์œ„ํ”„ํŠธ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ๊ฐ€๋” Type Annotation์— ๊ด€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌ๊ธ€๋ง ํ•  ๋•Œ๋„ ์–ด๋…ธํ…Œ์ด์…˜์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋งŽ์ด ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ƒฅ ๋ฌธ๋งฅ ์ƒ ๋ณ€์ˆ˜ ์ƒ์„ฑ์‹œ ํƒ€์ž…์„

seolhee2750.tistory.com

 

์ด ๋…ผ ์˜ต์…”๋„ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ๊ฐ’์ด ์กด์žฌํ•ด์•ผ ํ•˜๊ณ , 

๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ(์„ ์–ธ๋งŒ ํ•ด์ฃผ๊ณ  ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋“ฑ์˜ ์ƒํ™ฉ) ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๐Ÿ“Ž Optional Type

์˜ต์…”๋„ ํƒ€์ž…์€ ์œ„์˜ Type Annotation์œผ๋กœ ์„ ์–ธํ•œ ๋…ผ ์˜ต์…”๋„ ํƒ€์ž…์— ?๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€ ๋ชจ์–‘์ด๋‹ค.

var test: Int?

์ด๋ ‡๊ฒŒ! ์ž๋ฃŒํ˜• ๋’ค์— ?๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด ์˜ต์…”๋„ ํƒ€์ž…๋„ Type Inference๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

var test1: Int? = 1
var test2 = test1

์œ„์˜ ์ฝ”๋“œ๋Š” test2๋ฅผ ์˜ต์…”๋„๋กœ ์„ ์–ธ๋œ test1์„ ์ด์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ชจ์Šต์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์˜ต์…”๋„ ์ž๋ฃŒํ˜•์˜ ๋ณ€์ˆ˜ํ˜น์€ ์ƒ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜ต์…”๋„๋กœ ์ถ”๋ก ํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ฅ์ฃผ์˜ ์‚ฌํ•ญ ๐Ÿ’ฅ

ํ•˜์ง€๋งŒ Type Inference๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…”๋„์„ ์ง€์ •ํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ Non-Optional Type์„ ์„ ์–ธํ•  ๋•Œ ํ•˜๋“ฏ

var test = nil

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ!!!

 

๊ทธ ์ด์œ ๋Š”,

์ด ์ถ”๋ก  ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋’ค์— ์˜ค๋Š” ๊ฐ’๋งŒ ๋ณด๊ณ  ๊ทธ ์ž๋ฃŒํ˜•์„ ์œ ์ถ”ํ•ด์•ผ ํ•˜๋Š”๋ฐ

nil์€ ๊ทธ์•ผ๋ง๋กœ '๊ฐ’์ด ์—†์„'๋ฟ ์–ด๋–ค ์ž๋ฃŒํ˜•์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ์˜ต์…”๋„์„ ์ง€์ •ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹น์—ฐํžˆ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ๋ฐ–์— ์—†์Œ!


๐ŸŒŸ ์ •๋ฆฌ ๐ŸŒŸ

์˜ต์…”๋„์€ Type Annotation ๋’ค์— ?๋ฅผ ๋ถ™์ž„์œผ๋กœ์จ

์ผ๋ฐ˜์ ์ธ ์ž๋ฃŒํ˜•์ด nil ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. (๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„!)

์˜ต์…”๋„ ํƒ€์ž…๊ณผ ๋…ผ ์˜ต์…”๋„ ํƒ€์ž…์€ ์•„์˜ˆ ๋‹ค๋ฅธ ํƒ€์ž…!!!

 

(์˜ต์…”๋„ ์ถ”์ถœ์— ๋Œ€ํ•œ ๊ธ€์€ ์—ฌ๊ธฐ๐Ÿ‘‡์— ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค~!~)

2021.06.12 - [๐Ÿ“ Swift Note/๐Ÿ“‹ Concept Summary] - [Swift] ์˜ต์…”๋„ ์ถ”์ถœ (๊ฐ•์ œ ์ถ”์ถœ, ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ, ์˜ต์…”๋„ ์ฒด์ด๋‹) ์ •๋ฆฌ

 

[Swift] ์˜ต์…”๋„ ์ถ”์ถœ (๊ฐ•์ œ ์ถ”์ถœ, ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ, ์˜ต์…”๋„ ์ฒด์ด๋‹) ์ •๋ฆฌ

๋‚ด ๋ธ”๋กœ๊ทธ ์ฒซ ๊ธ€๋กœ ์˜ต์…”๋„์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์—…๋กœ๋“œํ–ˆ์—ˆ๋‹ค. ๊ทธ๋•Œ ์†Œ๊ฐœํ•˜๊ธฐ๋ฅผ, ๋‚ด๊ฐ€ ์Šค์œ„ํ”„ํŠธ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ ?์™€ !๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ํ–ˆ๋˜ ๊ธฐ์–ต,, ๊ทธ ๋‚ ์€ ?์— ๋Œ€ํ•ด์„œ ์†Œ๊ฐœ๋ฅผ ํ–ˆ๋‹ค๋ฉด ๊ทธ์— ์ด์–ด

seolhee2750.tistory.com

 


์ฐธ๊ณ 

๋Œ“๊ธ€