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

[Swift] guard / if (feat. ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ)

by seolhee2750 2021. 9. 6.

์Šค์œ„ํ”„ํŠธ์—๋Š” if์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋Š” guard๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค,,!

์ง€๊ธˆ๊นŒ์ง€๋Š” guard๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋Š๋ผ์ง€ ๋ชปํ•ด ๊ณต๋ถ€ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ์ด์œ ์—†๋Š” ๊ตฌ๋ฌธ์ด ์กด์žฌํ• ๋ฆฌ๋Š” ์—†๋‹ค.
์˜ค๋Š˜์€ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด ๊นŠ์ด์žˆ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ณด๋‹ค๊ฐ€ guard ๊ตฌ๋ฌธ์˜ ์ข‹์€ ์ธก๋ฉด์„ ์•Œ๊ฒŒ ๋˜์–ด

guard๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€, if์™€๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ๋“ฑ์„ ์•Œ์•„๋ณด๋ คํ•œ๋‹ค.

 

๐Ÿ“Ž guard

guard๋Š” '๋น ๋ฅธ ์ข…๋ฃŒ'์˜ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ์ด๋‹ค.

 

if ๊ตฌ๋ฌธ์€ "~๋ฉด ~ํ•ด๋ผ!" ๋ผ๋Š” ์˜๋ฏธ์ด์ง€๋งŒ,

guard ๊ตฌ๋ฌธ์€ "~์•„๋‹ˆ๋ฉด ๋๋‚ด๋ผ!" ๋ผ๋Š” ์˜๋ฏธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์šฐ์„  guard ๊ตฌ๋ฌธ์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋ฅผ ๋ณด์ž.

// ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ ๋ธ”๋ก ๋‚ด๋ถ€์— ์„ ์–ธ
guard (Bool ํƒ€์ž… ๊ฐ’) else {
    (์˜ˆ์™ธ์‚ฌํ•ญ ์‹คํ–‰๋ฌธ)
    (์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น์–ด)
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, guard๋Š” if์™€ ๊ฐ™์ด Bool ํƒ€์ž…์˜ ๊ฐ’์„ ์กฐ๊ฑด์œผ๋กœ ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค๋ฅธ ์ ์€ ํ•ด๋‹น ์กฐ๊ฑด ๋’ค์— ๋ฐ”๋กœ else๊ฐ€ ๋ถ™๋Š”๋‹ค๋Š” ์ ์ธ๋ฐ,

์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” else ๊ตฌ๋ฌธ์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” if์™€ ๋‹ฌ๋ฆฌ guard๋Š” ํ•œ ๊ตฌ๋ฌธ์—์„œ ๋ฐ”๋กœ ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

๐Ÿ‘‰ ์กฐ๊ฑด์ด false๋ฉด else์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ ,

๊ทธ ์ฝ”๋“œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก์„ ์ข…๋ฃŒํ•˜๋Š” ์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

(์—ฌ๊ธฐ์„œ ์ฝ”๋“œ ๋ธ”๋ก์„ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋Š”, guard์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

์ด ๋‚ด์šฉ์€ ์•„๋ž˜์—์„œ ๋‹ค์‹œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.)

 

๊ทธ ์˜ˆ์‹œ๋กœ if์™€ guard๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.


๐Ÿ“Ž guard์˜ ํ•œ๊ณ„, if์™€์˜ ์ฐจ์ด์ 

์•„๋ž˜๋Š” ๊ฐ๊ฐ if์™€ guard๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ๊ฐ™์€ ๋™์ž‘์„ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

// if ๊ตฌ๋ฌธ ํ™œ์šฉ
for i in 0...3 {
    if i == 1 { print(i) }
    else { continue }
}

// guard ๊ตฌ๋ฌธ ํ™œ์šฉ
for i in 0...3 {
    guard i == 1 else { continue }
    print(i)
}

0๋ถ€ํ„ฐ 3๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ i๊ฐ€ 1์ผ ๋•Œ 1์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ํ•œ ๊ฐ€์ง€์˜ ์˜ˆ์™ธ๋งŒ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์‚ฌํ•ญ๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ๋ฐ”๋กœ guard๋ฅผ ์‚ฌ์šฉํ•  ์ ์ ˆํ•œ ์‹œ๊ธฐ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ ์ด ํ•˜๋‚˜ ๋” ์žˆ๋Š”๋ฐ,

๋ฐ”๋กœ else์— ํ•ด๋‹นํ•˜๋Š” continue ์ฝ”๋“œ์ด๋‹ค.

 

์œ„์—์„œ๋Š” for ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— guard ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

continue๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก ๋ฐ˜๋ณต์˜ ์ข…๋ฃŒ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ์™ธ์—๋„ ํ•จ์ˆ˜๋‚˜ ๋ฐ˜๋ณต๋ฌธ ๋“ฑ์—์„œ guard ๊ตฌ๋ฌธ์€ else ๋ธ”๋ก์—

์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น์–ด๋กœ return, break, throw๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ ํ˜น์€ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด

์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— guard ๋ช…๋ น์–ด ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

์ด๊ฒŒ ๋ฐ”๋กœ guard ๊ตฌ๋ฌธ์˜ ํ•œ๊ณ„์ ์ด๋‹ค.๐Ÿ’ฅ


๐Ÿ“Ž guard let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ

์ด์ „์— ์˜ต์…”๋„ ์ถ”์ถœ์— ๊ด€ํ•œ ๊ธ€์„ ์—…๋กœ๋“œ ํ•œ ์ ์ด ์žˆ๋Š”๋ฐ,

๊ทธ ๋•Œ๋Š” ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์œผ๋กœ if let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ–ˆ์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ ๋˜ํ•œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ

๊ฐ’์ด nil์ผ ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ

guard๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ ๋” ๋ช…๋ฃŒํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ if let, guard let์„ ํ™œ์šฉํ•œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ ๋น„๊ต

let value_1: Int? = nil
let value_2: Int? = 2

// if let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ
func PrintValue_if(_ v: Int?) {
    if let tmp = v {
        print(tmp, "์ž…๋‹ˆ๋‹ค.")
    }
    else {
        print("nil ์ž…๋‹ˆ๋‹ค.")
    }
}

// guard let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ
func PrintValue_guard(_ v: Int?) {
    guard let tmp_g = v else {
        print("nil ์ž…๋‹ˆ๋‹ค.")
        return
    }
    
    print(tmp_g, "์ž…๋‹ˆ๋‹ค.")
}

PrintValue_if(value_1)
PrintValue_if(value_2)
// nil ์ž…๋‹ˆ๋‹ค.
// 2 ์ž…๋‹ˆ๋‹ค.

PrintValue_guard(value_1)
PrintValue_guard(value_2)
// nil ์ž…๋‹ˆ๋‹ค.
// 2 ์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ guard let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜๋ฉด nil์— ํ•ด๋‹นํ•˜๋Š” ์˜ˆ์™ธ๋งŒ์„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•ด์คŒ์œผ๋กœ์จ

if let ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋ณด๋‹ค ๊น”๋”ํ•˜๊ฒŒ ํ‘œํ˜„๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


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

guard๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์šฉ ์กฐ๊ฑด๋ฌธ!

์ƒํ™ฉ์— ๋”ฐ๋ผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์ง๊ด€์ ์ด๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 


์ฐธ๊ณ 

  • ๐Ÿ“– ์Šค์œ„ํ”„ํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ๐Ÿ“€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ์˜จ๋ผ์ธ ๊ฐ•์˜ -  iOS ์•ฑ ๊ฐœ๋ฐœ ์˜ฌ์ธ์› ํŒจํ‚ค์ง€

๋Œ“๊ธ€