[Swift ๋ฌธ๋ฒ•] 09. Swift์˜ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฒ”์œ„์—ฐ์‚ฐ์ž๋ฅผ ๋ฐฐ์›Œ๋ณด์ž.

2021. 1. 16. 11:13ใ†๐Ÿง‘๐Ÿป‍๐Ÿ’ป iOS ๊ฐœ๋ฐœ/Swift

ํ•ด๋‹น ๊ธ€์€ ์•ผ๊ณฐ๋‹˜์˜ ์Šค์œ„ํ”„ํŠธ ๊ฐ•์˜์™€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Swift์˜ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

1. ์กฐ๊ฑด๋ฌธ

1. 1. if else ๊ตฌ๋ฌธ 

Swift์˜ if else ๊ตฌ๋ฌธ์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ๋ฅผ ๋ ์ง€๋งŒ ์กฐ๊ฑด์„ ๊ฐ์‹ธ๋Š” ์†Œ๊ด„ํ˜ธ๊ฐ€ ์„ ํƒ์‚ฌํ•ญ์ด๋ผ๋Š” ๊ฒƒ๊ณผ ์กฐ๊ฑด์ด ๋ฌด์กฐ๊ฑด Bool Type์ด์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•์ž…๋‹ˆ๋‹ค. if ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ if, else if, else ์ˆœ์œผ๋กœ ์กฐ๊ฑด์„ ์ฒดํฌํ•˜๊ณ  true๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ตฌ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ํ˜•ํƒœ
// if else ๊ธฐ๋ณธํ˜•ํƒœ
    
if ์กฐ๊ฑด๋ฌธ {	
		์‹คํ–‰๊ตฌ๋ฌธ1    
    
} else if ์กฐ๊ฑด๋ฌธ {
		์‹คํ–‰๊ตฌ๋ฌธ2
    
} else {
		์‹คํ–‰๊ตฌ๋ฌธ3
}

1. 2. switch ๊ตฌ๋ฌธ

๋ˆˆ ์—ฌ๊ฒจ๋ณด์•„์•ผ ํ•  ๊ฒƒ์€ ์ด switch ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. switch๋ฌธ๋„ if else ๊ตฌ๋ฌธ์ฒ˜๋Ÿผ ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ณ  ๋”ฐ๋กœ break ํ‚ค์›Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ case ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด switch ๊ตฌ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋˜ํ•œ  ๋น„๊ต๊ฐ’์ด ๋ช…ํ™•ํžˆ ํ•œ์ •์ ์ธ ๊ฐ’์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ default๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์œ„์—์„œ ๋ถ€ํ„ฐ ์กฐ๊ฑด์— ๋งž๋Š” case๋ฅผ ์—ฐ์†์ ์œผ๋กœ break ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด fallthrough ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. case์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๊ต๊ฐ’์„ , (comma)๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ฒดํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Swift์˜ ๊ตฌ๋ฌธ์˜ ์กฐ๊ฑด์—๋Š” ์ •์ˆ˜ ๊ฐ’ ๋ง๊ณ ๋„ ๋‹ค์–‘ํ•œ ๊ฐ’ (์ •์ˆ˜, ๋ถ€๋™์†Œ์ˆ˜ ํƒ€์ž…, ๋ฌธ์ž, ๋ฌธ์ž์—ด, ํŠœํ”Œ ๋“ฑ) ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅ๊ฐ’๊ณผ ๊ฐ case์— ๋“ค์–ด๊ฐˆ ๋น„๊ต๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ•ญ์ƒ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • switch ๊ตฌ๋ฌธ ๊ธฐ๋ณธ ํ˜•ํƒœ
// switch ๊ตฌ๋ฌธ ๊ธฐ๋ณธํ˜•ํƒœ

switch ์ž…๋ ฅ๊ฐ’ {
        
      	case ๋น„๊ต๊ฐ’:
      		์‹คํ–‰๊ตฌ๋ฌธ
            
   	case ๋น„๊ต๊ฐ’2, ๋น„๊ต๊ฐ’3:
        	์‹คํ–‰๊ตฌ๋ฌธ
            
        default: 
        	์‹คํ–‰๊ตฌ๋ฌธ
         
 } 

  • ๋‹ค์–‘ํ•œ ์ž…๋ ฅ๊ฐ’ , fallthrough ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
var someCountry: Character = "๐Ÿคญ"
    
switch someEmoji {

      case "๐Ÿ˜€","๐Ÿ˜‰","๐Ÿคญ":
        print("\(someEmoji)์€ ์›ƒ๋Š” ์ด๋ชจ์ง€ ์ž…๋‹ˆ๋‹ค.")
        fallthrough
        
      case "๐Ÿ˜ฑ":
      	print("\(someEmoji)์€ ๊ธฐ๋ถ„์ด ๋ณ„๋กœ์ธ ์ด๋ชจ์ง€์ž…๋‹ˆ๋‹ค.")
        
      default:
      	print("\(someEmoji)์€ ์ด๋ชจ์ง€์ž…๋‹ˆ๋‹ค.")
}

// ๐Ÿคญ์€ ์›ƒ๋Š” ์ด๋ชจ์ง€ ์ž…๋‹ˆ๋‹ค.
// ๐Ÿคญ์€ ๊ธฐ๋ถ„์ด ๋ณ„๋กœ์ธ ์ด๋ชจ์ง€์ž…๋‹ˆ๋‹ค.

fallthrough ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•˜๋ฉด ํ•˜๋‚˜์˜ case๋ฌธ์„ ๊ฑฐ์นœ ๋’ค ๊ทธ๋‹ค์Œ case๋ฌธ์ด ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋”๋ผ๋„ ์ด์–ด์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

case " ๐Ÿ˜ฑ" ์ดํ›„์— fallthrough ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— break ์ฒ˜๋ฆฌ๋˜์–ด ๊ตฌ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ต๋‹ˆ๋‹ค.


  • ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ Switch ์กฐ๊ฑด๋ฌธ
var intVal: Int = 5

switch intVal {
    
    case 0: print("Value is zero")
    
    case 1...10: print("Value is in 1~10")
    
    case 11..<20: print("Value๋Š” 11์ด์ƒ 20๋ฏธ๋งŒ")
    
    case Int.min..<0: print("Value๋Š” ์Œ์ˆ˜")
    
    default: print("Value๋Š” 20 ์ด์ƒ์˜ ์–‘์ˆ˜")
    
}

intVal = 20

switch intVal {
    
    case 0: print("Value is zero")
    
    case 1...10: print("Value is in 1~10")
    
    case 11..<20: print("Value๋Š” 11์ด์ƒ 20๋ฏธ๋งŒ")
    
    case Int.min..<0: print("Value๋Š” ์Œ์ˆ˜")
    
    default: print("Value๋Š” 20์ด์ƒ์˜ ์–‘์ˆ˜")
    
}

Swift์—์„œ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์‰ฝ๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž

    • ํ์‡„ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž A...B : A ๋ถ€ํ„ฐ B๋ฅผ ํฌํ•จํ•˜๋Š” A๋ถ€ํ„ฐ B๊นŒ์ง€์˜ ์ˆ˜
    • ๋ฐ˜ํ์‡  ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž A..<B: A ๋ถ€ํ„ฐ B๋ฏธ๋งŒ๊นŒ์ง€์˜ ์ˆ˜
    • A...: A ์ด์ƒ์˜ ์ˆ˜
    • ...A: A ์ดํ•˜์˜ ์ˆ˜
    • ..<A: A ๋ฏธ๋งŒ์˜ ์ˆ˜

  • ๊ฐ’ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•œ ํŠœํ”Œ switch case
var tupleValue: (name: String, age: Int) = ("extramilejin", 20)

switch tupleValue {

    case ("extramilejin", 28):
    		print(" ์ด๋ฆ„๊ณผ ๋‚˜์ด ๋ชจ๋‘ ๋งž์ท„์Šต๋‹ˆ๋‹ค!")
    case ("extramilejin", let age):					//let์„ ๋ถ™ํžŒ ๊ฐ’ ๋ฐ”์ธ๋”ฉ.
    		print(" ์ด๋ฆ„๋งŒ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ๋‚˜์ด๋Š” \(age)์ž…๋‹ˆ๋‹ค.")
    case (let name, 28):						//let์„ ๋ถ™ํžŒ ๊ฐ’ ๋ฐ”์ธ๋”ฉ.
    		print(" ๋‚˜์ด๋งŒ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ์ด๋ฆ„์€ \(name)์ž…๋‹ˆ๋‹ค.")
    default:
    		print(" ๋‘˜ ๋‹ค ์•„๋‹™๋‹ˆ๋‹ค.")
}

tupleValue = ("extramilejin", 28)

switch tupleValue {

    case ("extramilejin", 28):
    		print(" ์ด๋ฆ„๊ณผ ๋‚˜์ด ๋ชจ๋‘ ๋งž์ท„์Šต๋‹ˆ๋‹ค!")
    case ("extramilejin", let age):
    		print(" ์ด๋ฆ„๋งŒ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ๋‚˜์ด๋Š” \(age)์ž…๋‹ˆ๋‹ค.")
    case (let name, 28):
    		print(" ๋‚˜์ด๋งŒ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ์ด๋ฆ„์€ \(name)์ž…๋‹ˆ๋‹ค.")
    default:
    		print(" ๋‘˜ ๋‹ค ์•„๋‹™๋‹ˆ๋‹ค.")
}


2. ๋งˆ๋ฌด๋ฆฌ 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Swift์˜ ์กฐ๊ฑด๋ฌธ์ธ if else ๊ตฌ๋ฌธ๊ณผ switch ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. switch ๊ตฌ๋ฌธ์˜ ๋น„๊ต๊ฐ’์— where ์ ˆ์„ ๋”ํ•ด ์กฐ๊ฑด์„ ๋” ์ƒ์„ธํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ where์ ˆ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. Swift ๋ฌธ๋ฒ•์„ ๋‹ค ๋ณด๊ณ  ์ด์ œ ๊ณต๋ถ€ํ•  Objective - C์ฑ…์ด ๋„์ฐฉํ–ˆ๋„ค์š”! ๋ฐฐ์šธ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์ง€๋งŒ ๊ณ„์† ๋ณต์Šต ๊ฒธ Swift ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ: ์• ํ”Œ API ๊ฐ€์ด๋“œ๋ผ์ธ , ์• ํ”Œ ๊ณต์‹ ๊ฐœ๋ฐœ ๋ฌธ์„œ , Swift 5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ/ ์ง€์€์ด ์•ผ๊ณฐ