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

Swift/Swift BASIC

[Swift] ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์˜ˆ์™ธ์ฒ˜๋ฆฌ (throws, do-catch, try)

๊ฐ์ž ๐Ÿฅ” 2022. 1. 23. 12:28
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์ž์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์—๋Ÿฌ๋ฅผ ๋‹ค๋ฃจ๋Š” try-catch๊ตฌ๋ฌธ์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ฃ ! ๊ฐ„๋‹จํ•˜๋‹ˆ ์–ด์„œ gogo~

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํ”„ 30๊ฐœ๋กœ ๋ฐฐ์šฐ๋Š” ios๊ฐœ๋ฐœ ๊ฐ•์˜์™€, ์ธํ„ฐ๋„ท ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…๋“ค์„ ๋ณด๋ฉฐ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค :)


try-catch๋ž€?

try-catch๋ž€ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ์ด๋‹ค. ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ž€, ํ”„๋กœ๊ทธ๋žจ๋‚ด์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ณ  ์ด๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. Swift์—์„œ๋Š” ๋Ÿฐํƒ€์ž„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐœ์ƒ, ๊ฐ์ง€, ์ „ํŒŒ, ์กฐ์ž‘์„ ์ง€์›ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ชจ๋“ ๊ธฐ๋Šฅ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๊ตฌ๋ณ„ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋“ฑ์— ๋Œ€ํ•œ ์กฐ์น˜์™€ ๋Œ€์‘์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ try-catch๊ฐ€ ์ค‘์š”ํ•˜๋‹ค!

try-catch๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž. Swift์—์„œ ์—๋Ÿฌ๋Š” ์—๋Ÿฌ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ์—๋Ÿฌํ”„๋กœํ† ์ฝœ์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์—†๋Š” ๋นˆ ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ, ์˜ค๋ฅ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•ด์•ผํ•œ๋‹ค. Swift์˜ ์—ด๊ฑฐํ˜•์€ ์˜ค๋ฅ˜ ์›์ธ์„ ๋‚˜๋ˆ„๊ณ , ํ•ด๋‹น ์˜ค๋ฅ˜์˜ ํŠน์„ฑ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋งŒ๋“œ๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค!

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

enum PhoneError: Error {
	case unknown
    case batteryLow(batteryLevel: Int)
}

 

๊ทธ๋Ÿผ ์ด์ œ ๋งŒ์•ฝ ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์—†์„๋•Œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผํ•˜๋Š”๋ฐ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ? throw ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ž(์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ์ฃผ์ž).

throw PhoneError.batteryLow(batteryLevel: 20)

 ๋ฐฐํ„ฐ๋ฆฌ ๋ ˆ๋ฒจ์ด 20์ผ ๋•Œ batteryLow๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ฒŒ๋” ๋˜์ ธ์ฃผ์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋˜์งˆ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์˜ค๋ฅ˜๊ฐ€ ๋˜์ ธ์ง€๋Š” ๊ฒƒ์— ๋Œ€๋น„ํ•˜์—ฌ ๋˜์ ธ์ง„ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. ๋˜์ ธ์ง„ ์˜ค๋ฅ˜๊ฐ€ ๋ญ”์ง€ ํŒŒ์•…ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋˜์ง€, ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๋˜์ง€ ๋“ฑ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Swift์—์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ๋„ค ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ํ•จ์ˆ˜์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๋‹นํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์— ์ „ํŒŒํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. do catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•
  3. optional๋กœ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  4. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฐจ๋ก€๋Œ€๋กœ ์–ด๋–ป๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

1) ํ•จ์ˆ˜์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์— ์ „ํŒŒํ•˜๋Š” ๋ฐฉ๋ฒ• (do catch ์‚ฌ์šฉ)

ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜ ๋’ค์— throws ํ‚ค์›Œ๋“œ (throwing ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค) ๋ฅผ ์‚ฌ์šฉํ•œ ๊ตฌ๋ฌธ์„ ์ ์–ด์ฃผ๋ฉด๋œ๋‹ค.

func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
	guard batteryLevel != -1 else { throw PhoneError.unknown }
    guard batteryLevel >= 20 else { throw PhoneError.batteryLow(batteryLow: 20) }
	return "๋ฐฐํ„ฐ๋ฆฌ ์ƒํƒœ๊ฐ€ ์ •์ƒ์ž…๋‹ˆ๋‹ค."
}

guard๋ฌธ๊ณผ throw ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ์ฃผ์—ˆ๋‹ค. guard๋ฌธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด else๋กœ ๋„˜์–ด๊ฐ€์„œ ํฐ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์˜ค๋ฅ˜๋ฅผ ํ• ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— do-catch๋‚˜ try-catch๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

์šฐ์„ , do-catch๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

do {
	try ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ ์ฝ”๋“œ
} catch ์˜ค๋ฅ˜ ํŒจํ„ด {
	์ฒ˜๋ฆฌ ์ฝ”๋“œ
}

ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž ์ค‘์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ์ฃผ๋ฉด, ์˜ค๋ฅ˜ ๋ฐœ์ƒ์„ ์ „๋‹ฌ๋ฐ›์€ ์ฝ”๋“œ ๊ตฌ๋ฌธ์€ do catch ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด๋œ๋‹ค. do์ ˆ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ณ , catch ์ ˆ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋ฉด์„œ do catch๊ตฌ๋ฌธ์— ๋Œ€ํ•ด์„œ ๋” ์‚ดํŽด๋ณด์ž.

do {
	try checkPhoneBatterytStatus(batteryLevel: -1)
} catch PhoneError.unknown {
	print("์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.")
} catch PhoneError.battertyLow(let batteryLebel) {
	print("๋ฐฐํ„ฐ๋ฆฌ ์ „์› ๋ถ€์กฑ ๋‚จ์€ ๋ฐฐํ„ฐ๋ฆฐ : \(batteryLebel)%")
} catch {
	print("๊ทธ ์™ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ : \(error)")
}

catch ๋’ค์— ์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ฝ”๋“œ๋ธ”๋ก์„ ์ƒ์„ฑํ•˜๋ฉด ๋ธ”๋ก ๋‚ด๋ถ€์— ์•”์‹œ์ ์œผ๋กœ ์—๋Ÿฌ๋ผ๋Š” ์ด๋ฆ„์˜ ์ง€์—ญ์ƒ์ˆ˜๊ฐ€ ์˜ค๋ฅ˜ ๋‚ด์šฉ์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ์—์„œ unknown๋„ ์•„๋‹ˆ๊ณ , batteryLow๋„ ์•„๋‹ˆ์–ด์„œ ๋งจ ๋งˆ์ง€๋ง‰ catch๊ตฌ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค๋ฉด, ์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜๊ฐ€ ๋ช…์‹œ๋˜์–ด์žˆ์ง€ ์•Š๋”๋ผ๋„ ๊ทธ๊ฒƒ๋˜ํ•œ ์˜ค๋ฅ˜๋‚ด์šฉ์œผ๋กœ ์ธ์‹ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด checkPhoneBatteryStatusํ•จ์ˆ˜๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋˜๋ฉด, catch ๋ฌธ์ด ์ด ์˜ค๋ฅ˜๋ฅผ ์žก์•„์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ค๋ฅ˜ ์ƒํ™ฉ์— ๋งž๋Š” ์ ์ ˆํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 ์œ„ ์ฝ”๋“œ์—์„œ๋Š” CheckPhoneBatteryStatus์— -1์„ ์ „๋‹ฌํ–ˆ์œผ๋‹ˆ ํ•ด๋‹น ํ•จ์ˆ˜์—์„œ unknown ์—๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์ด๋ฅผ catch๊ฐ€ ์žก์•„์„œ "์•Œ ์ˆ˜์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.

 

2) try?๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์˜ต์…”๋„ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜์ž.

try?๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋™์ž‘ํ•˜๋˜ ์ฝ”๋“œ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๋ฉด, ๊ทธ ์ฝ”๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์ด nil์ด ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ try ๋’ค์— ๋ฌผ์Œํ‘œ(?)๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ , ์ถœ๋ ฅํ•ด๋ณด์ž.

let status = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status)

//prints nil

checkPhoneBatteryStatusํ•จ์ˆ˜๊ฐ€ unknown์ด๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ๋˜์ ธ์ค€๋‹ค. ๋”ฐ๋ผ์„œ status๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด nil์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค. (์—๋Ÿฌ๋ฅผ nil๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค!!)

๊ทธ๋Ÿผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š” ๋ฒ ํ„ฐ๋ฆฌlevel์„ ๋„ฃ์–ด๋ณด์ž.

let status = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status)

//prints optional("๋ฐฐํ„ฐ๋ฆฌ ์ƒํƒœ๊ฐ€ ์ •์ƒ์ž…๋‹ˆ๋‹ค.")

์ด์ฒ˜๋Ÿผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด nil, ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ต์…”๋„(๊ฒฐ๊ด๊ฐ’) ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

3) try!๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด๋ณด์ž. (์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ)

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋ ๊ฒƒ ๊ฐ™์€ ํ•จ์ˆ˜ ๊ตฌ๋ฌธ์— try!๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. try!๋Š” throwingํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์ ˆ๋Œ€๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

๋งŒ์•ฝ์— ์˜ค๋ฅ˜๋ฅผ ๋˜์ง„๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋‹ˆ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

let status2 = try! checkPhoneBatteryStatus(batteryLevel: 30)
print(status2)

//prints "๋ฐฐํ„ฐ๋ฆฌ ์ƒํƒœ๊ฐ€ ์ •์ƒ์ž…๋‹ˆ๋‹ค."

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…”๋„๊ฐ’์ด ๋ฒ—๊ฒจ์ง„ ๋ฐ˜ํ™˜๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ•ด๋‹น try!๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋œ๋‹ค.

let status2 = try! checkPhoneBatteryStatus(batteryLevel: -1)
print(status2)

// Error!!!!!

 

try-catch๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฑฐ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž˜ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž!

 

๋ฐ˜์‘ํ˜•