Swift - if let (Optional)

2022. 6. 12. 19:06ใ†ios

Swift - if let ์กฐ๊ฑด๋ฌธ

 

swift์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์กฐ๊ฑด๋ฌธ์„ ์•Œ๊ธฐ ์ „์— swift์—์„œ ์‚ฌ์šฉํ•˜๋Š” optional์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„๋ด…์‹œ๋‹ค. 

 

Optional

optional value๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์•ˆ์ •์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ๋Š๊ปด๋ด…์‹œ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์— ๋กœ๊ทธ์ธํ•˜๊ณ  ์ ‘์†ํ–ˆ์„ ๋•Œ ๋‹‰๋„ค์ž„์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋‹‰๋„ค์ž„์„, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๋…ธ์ถœ์‹œํ‚จ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๋Š” ์ด์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

let nickname: String?= "jimin" //์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด ์•ž๊ณผ ๊ฐ™์ด String์ด ์•„๋‹Œ nil๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ?๋ฅผ ๋ถ™์—ฌ ์ •์˜

if nickname != nil {
	print("your name is \(nickname)") //output: your name is Optional("jimin")
} else {
	print("nil")
}

 

๋งŒ์•ฝ ์œ„์˜ ์ฝ”๋“œ์—์„œ ์˜ต์…”๋„ ๊ธฐํ˜ธ์ธ ?๋ฅผ ์ œ์™ธํ–ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋˜์—ˆ์„๊นŒ์š”?

 

์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ž˜ ์ž‘๋™ํ•˜๊ฒ ์ง€๋งŒ ๊ฐ’์ด ์—†์„ ๋•Œ๋Š” Crash๋ฅผ ๋‚ด์„œ ์•ฑ์ด ์ค‘๋‹จ๋  ๊ฒ๋‹ˆ๋‹ค.

์ด๋Š” ์•ฑ์ด ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ •์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” Optional์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” nil์„ ๋˜์ ธ ๊ทธ์— ๋Œ€ํ•œ ์ผ€์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์ด Crash๋˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Optional์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

 

์œ„์˜ ์˜ˆ์‹œ์—์„œ ๊ณ ์ณ์•ผํ•  ๋ถ€๋ถ„์ด ํ•˜๋‚˜ ๋” ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. output๋ถ€๋ถ„์„ ๋ณด๋ฉด ์•„์‹คํ…๋ฐ์š”, Jimin์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Optional("Jimin")์ด ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” nickname์„ String? = ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•จ์œผ๋กœ์จ ์˜ต์…”๋„๋กœ wrapping๋œ ๊ฐ’์„ ๊ฐ–๊ฒŒ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ unwrapping์„ ํ•œ ๋’ค์— ์ถœ๋ ฅ์„ ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ต์…”๋„ ๊ฐ’์„ unwrapํ•˜๋Š” ๋ฐฉ๋ฒ•์€ !์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. '

 

let name: String?= "jerry"
print(name) //output: Optional("jerry")
print(name!) //output: jerry

 

ํ•˜์ง€๋งŒ !์„ ์‚ฌ์šฉํ•˜์—ฌ unwrapํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ’์ด ์—†์„ ๋–„(nil์ผ ๋–„) ๋Ÿฐํƒ€์ž„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์™„ํ•œ ๋ฐฉ๋ฒ•์ด ์šฐ๋ฆฌ๊ฐ€ ์‚ดํŽด ๋ณผ ๋ฉ”์ธ ์ฃผ์ œ์ธ if let ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

if let

 

if let์€ ํ‰๋ฒ”ํ•œ if์™€๋Š” ๋‹ค๋ฅด๊ฒŒ !์„ ์‚ฌ์šฉํ•˜์—ฌ unwrapํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ unwrapping๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒํ•˜๊ณ , ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์™€ nil์ธ ๊ฒฝ์šฐ, ๋‘ ๊ฐ€์ง€ ์ผ€์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰ if let ๊ตฌ๋ฌธ์€ ํ•œ ์ค„์—์„œ "nil์ฒดํฌ", "unwrapping" ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•ด๋ด…์‹œ๋‹ค.

 

let optionalName: String? = "jinsu"
if let name = optionalName {
    print("Hello, \(name)");
} else {
    print("nil, \(optionalName2)");
}

 

์œ„ ํ•จ์ˆ˜์˜ ๋งค์ปค๋‹ˆ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. optionalName์— ๋Œ€ํ•ด nil์ฒดํฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋กœ์ปฌ๋ณ€์ˆ˜ name์— unwrapping๋œ ๊ฐ’์ธ jinsu๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

3. printํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด Hello, Jinsu๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

์œ ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ์ƒ์„ฑ๋œ ๋กœ์ปฌ๋ณ€์ˆ˜ name์€ if๋ฌธ ๋ฐ–์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰ unwrapping๋œ ์š”์†Œ์ธ name์€ if๋ฌธ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

'ios' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

swift - ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด  (0) 2022.07.05
Swift - ์—ด๊ฑฐํ˜•(enum), ์›์‹œ๊ฐ’, ์—ฐ๊ด€๊ฐ’  (0) 2022.06.30
Swift- inout  (0) 2022.06.28
Swift - ํ•จ์ˆ˜  (0) 2022.06.27
Swift - let, var, array, dictionary  (0) 2022.06.12