Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/Swift BASIC

[Swift] ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - guard ๊ตฌ๋ฌธ (guard๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ )

๊ฐ์ž ๐Ÿฅ” 2022. 1. 14. 17:32
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์ž์ž…๋‹ˆ๋‹ค! swift์˜ ์กฐ๊ฑด๋ฌธ์€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋น„์Šทํ•˜๊ฒŒ if, switch๊ตฌ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์€ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ๋Š” guard ๋ฌธ์ด ์žˆ๋Š”๋ฐ์š”, ์ด์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

guard ๊ตฌ๋ฌธ

์šฐ์„  guard๊ตฌ๋ฌธ์€ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ ๋ธ”๋ก ๋‚ด๋ถ€์— ์„ ์–ธํ•˜๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ์šฉ๋„๋กœ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. guard๊ตฌ๋ฌธ์˜ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

guard ์กฐ๊ฑด else {
	//์กฐ๊ฑด์ด false๋ฉด ์‹คํ–‰
    return || throw
}

guard๋ฌธ์€ ์กฐ๊ฑด์ด ํ‹€๋ฆฐ ๊ฒฝ์šฐ๋Š” ๋ชจ๋‘ ๋ฒ„๋ฆฌ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด๋งŒ ํ†ต๊ณผ์‹œํ‚ค๊ฒ ๋‹ค๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. if๋ฌธ๊ณผ์˜ ์ฐจ์ด์ ์œผ๋กœ ๋ณด๋ฉด if๋ฌธ์€ '~๋ฉด ~ํ•ด๋ผ' ์˜ ์‹คํ–‰ ๊ตฌ๋ฌธ์ด์ง€๋งŒ, guard๋Š” '~์•„๋‹ˆ๋ฉด ๋๋‚ด๋ผ' ๋ผ๋Š” ์˜๋ฏธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ guard๋ฌธ์€ '๋น ๋ฅธ ์ข…๋ฃŒ'์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด์ž.

func test() {
	let condition1: Bool = true
    let condition2: Bool = true
    guard condition1, condition2 else {
    	return print("bye")
	}
	print("come in")
}
test()

// prints "come in" 
// ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ true์ด๋ฏ€๋กœ guard ๋‚ด๋ถ€ ์‹คํ–‰๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค.

guard๋ฌธ์€ ์กฐ๊ฑด์ด ๋งž์ง€ ์•Š์œผ๋ฉด ์ข…๋ฃŒ์‹œ์ผœ์•ผํ•˜๋„๋ก ๋ฌธ๋ฒ•์„ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ return ์ด๋‚˜ throw๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

guard ๊ตฌ๋ฌธ์˜ ํ•œ๊ณ„์ ๊ณผ if ๊ตฌ๋ฌธ๊ณผ์˜ ์ฐจ์ด์ 

โ–ถ guard๊ตฌ๋ฌธ์€ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ ํ˜น์€ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํ•œ๊ณ„์ ์ด ์žˆ๋‹ค. 

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

for i in 0...3 {
	if i == 1 { print(i) }
    else { continue }
}

for i in 0...3 {
	guard i == 1 else { continue }
    print(i)
}

0๋ถ€ํ„ฐ 3๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ i๊ฐ€ 1์ด๋ฉด ์ถœ๋ ฅํ•ด์ฃผ๋Š” for-in ๊ตฌ๋ฌธ์ด๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„œ๋Š” i๊ฐ€ 1์ผ ๊ฒฝ์šฐ์ธ ๋‹จ ํ•œ ๊ฐ€์ง€์˜ ์˜ˆ์™ธ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ guard๊ตฌ๋ฌธ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ์ ์€ else ๊ตฌ๋ฌธ์— ์žˆ๋Š” contniue์ด๋‹ค. continue๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ์จ ์˜ˆ์™ธ์‚ฌํ•ญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฝ”๋“œ ๋ธ”๋ก ๋ฐ˜๋ณต์˜ ์ข…๋ฃŒ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. continue์ด์™ธ์—๋„ ์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น๋ฌธ์œผ๋กœ return, break, throw ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น๋ฌธ์€ ํ•จ์ˆ˜, ๋ฐ˜๋ณต๋ฌธ, ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. guard๋Š” ๊ตฌ๋ฌธ์€ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ์ข…๋ฃŒ์‹œํ‚ค๋Š” ๋ฌธ๋ฒ•์„ ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•ด์•ผํ•˜๋ฏ€๋กœ, ์ œ์–ด๋ฌธ ์ „ํ™˜ ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ๋ถ„๋ช…ํžˆ ์กด์žฌํ•œ๋‹ค. 

 

guard๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โ–ถ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์‹ค ์•„์ง ๊ทธ๋Ÿด๋“ฏํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋ณธ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ๊ณต๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ if๋ฌธ๊ณผ ๋น„๊ตํ•ด์„œ guard๋ฌธ์„ ์‚ดํŽด๋ณด์•˜์„ ๋•Œ ์•„์ฃผ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง์„ ๋Š๊ผˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ guard๋ฌธ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋  ๊ฒƒ๊ฐ™๋‹ค.

  • if๋ฌธ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ
func solution() {
	if condition1 {
    	if condition2 {
        	if condition 3 {
            	print("come in")
			} else {
            	print("bye")
			}
		} else {
        	print("bye")
		}
	} else {
    	print("bye")
	}
}

// ์„ธ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ฐธ์ด๋ฉด come in, ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ์ง“์ด๋ฉด bye๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์กฐ๊ฑด๋ฌธ์„ ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋‹จ ์ด๋ ‡๊ฒŒ๋‚˜ ๋ณต์žกํ•ด(?)๋ณด์ธ๋‹ค. ์ด๋ฅผ guard๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ.

func solution() {
	guard condition1 else { return print("bye") }
    guard condition2 else { return print("bye") }
    guard condition3 else { return print("bye") }
    print("come in")
}

์กฐ๊ฑด์‹์—์„œ else๋ฅผ ๋‹ฌ์•„๊ฐ€๋ฉฐ ๋ถ€์ •์ ์ธ ์กฐ๊ฑด์‹์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ๊ทธ๋Œ€๋กœ ์ ๋Š”๋‹ค๋Š” ์ ์—์„œ ํ›จ์”ฌ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

๋งˆ๋ฌด๋ฆฌ

๋‹ค์Œ ๊ธ€์—์„œ๋Š” guard let ๊ตฌ๋ฌธ๊ณผ if let๊ตฌ๋ฌธ์˜ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ… ํ•ด๋ณด๊ฒ ๋‹ค. 

๋ฐ˜์‘ํ˜•