โจ๏ธ Language/swift
[Swift] ์กฐ๊ฑด/๋ฐ๋ณต๋ฌธ
hyebin (Helia)
2024. 3. 17. 11:30
๋ฐ์ํ
1. ์กฐ๊ฑด๋ฌธ
์กฐ๊ฑด๋ฌธ์ ๊ฐ๋
์ด๋ ํ ๊ฐ์ด ํน์ ์กฐ๊ฑด์ ํด๋นํ ๋๋ง ์ ํ์ ์ผ๋ก ์ฝ๋๋ฅผ ์คํ
if-else
if ์กฐ๊ฑด {
//์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด ์คํ
} else {
//์กฐ๊ฑด์ด ๋ง์กฑ๋์ง ์์ผ๋ฉด ์คํ
}
var a : String = "์ฒ ์"
var b : String = "์งฑ๊ตฌ"
var c : String = "๋งน๊ตฌ"
if a == "์ฒ ์" {
print("์ ๋ต!")
}
else {
print("a๋ \\(a)์
๋๋ค.")
}
if b == "์ ๋ฆฌ" {
print("์ ๋ต!")
}
else {
print("b๋ \\(b)์
๋๋ค.")
}
// ์ ๋ต!
// b๋ ์งฑ๊ตฌ์
๋๋ค.
var age : Int = 19
var student : String = ""
if age >= 8 && age < 14 {
student = "์ด๋ฑํ์"
} else if age < 17 {
student = "์คํ์"
} else if age < 20 {
student = "๊ณ ๋ฑํ์"
} else {
student = "๊ธฐํ"
}
- else if ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ค ์ ์ด ๊ฐ๋ฅ
switch-case
switch ๋น๊ต๊ฐ {
case ํจํด:
/*์คํ๊ตฌ๋ฌธ*/
default: //else if ๊ฐ์ ๊ฐ๋
/*์คํ๊ตฌ๋ฌธ*/
}
switch value
{
case value1:
respond to value 1
case value2,
value3:
respond to value 2 or 3
default:
otherwise, do something else
}
switch weather {
case "rain":
print("Bring an umbrella")
case "snow":
print("Wrap up warm")
case "sunny":
print("Wear sunscreen")
fallthrough
default:
print("Enjoy your day!")
}
//Wear sunscreen
//Enjoy your day!
- ํจํด ๋น๊ต๋ฌธ
- ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋งค์นญ๋๋ ํจํด์ ๊ตฌ๋ฌธ ์คํ
- switch๋ฌธ์ ์ ๋ ฅ ๊ฐ์ผ๋ก ์ซ์ ํํ์ด ์๋ ๋ฌธ์, ๋ฌธ์์ด, ์ด๊ฑฐํ, ํํ, ๋ฒ์, ํจํด์ด ์ ์ฉ๋ ํ์ ๋ฑ ๋ค์ํ ํ์ ์ ๊ฐ๋ ์ฌ์ฉ ๊ฐ๋ฅํจ.
- ๊ฐ ์ํ๋ ํค์๋ case๋ฅผ ํตํด ๋ํ๋ผ ์ ์์
- case ๋ด๋ถ์ ์ฝ๋๋ฅผ ๋ชจ๋ ์คํํ๋ฉด break ์์ด๋ ๊ตฌ๋ฌธ์ด ์ข ๋ฃ
- case๋ ์ํ๋ ๋งํผ ์ฌ๋ฌ ๋ฒ ์์ฑ ๊ฐ๋ฅ
- ์๋ชป๋ case ์ฌ์ฉ
let stringValue: String = "์์นด๋ฐ๋ฏธ" switch stringValue { case "์ ํ": print("์๋ ํ์ธ์ ์ ํ์ ๋๋ค.") case "์ผ์ฑ": //์คํ๋ ์ฝ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฐ์ default: print("์๋ ํ์ธ์ \\(stringValue)์ ์ฐพ์์์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค") } // ์๋ ํ์ธ์ ์์นด๋ฐ๋ฏธ์ ์ฐพ์์์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค โฌ๏ธ let stringValue: String = "์์นด๋ฐ๋ฏธ" switch stringValue { case "์ ํ": fallthrough case "์ผ์ฑ": fallthrough case "ํ์ธ": fallthrough case "ํฌ๋จ", "์ํผ์", "์บ์ํผ": print("์๋ ํ์ธ์. \(stringValue)") default: print("์๋ ํ์ธ์ \(stringValue)์ ์ฐพ์์์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค") } // ์๋ ํ์ธ์ ์์นด๋ฐ๋ฏธ์ ์ฐพ์์์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
- ์ case ๋ธ๋ญ์ "ํฌ๋จ", "์ํผ์", "์บ์ํผ": ์ฒ๋ผ ์ฌ๋ฌ ๊ฐ์ ํญ๋ชฉ์ ํ ๋ฒ์ case ๋ก ์ง์ ํด์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅ
- ์ฌ๋ฌ ํญ๋ชฉ์ ๋ํ๋ด๊ธฐ ์ํด case๋ฅผ ์ฐ๋ฌ์ ์ฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ
- case XXX:๋ค์์๋ ๊ผญ ์คํ ๊ฐ๋ฅํ ์ฝ๋๊ฐ ์์นํด์ผ ํจ
- switch๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ปค๋ฒํ๊ธฐ ์ํด์๋ ๋ง์ง๋ง์ default ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํจ
- ๋งค์ฐ ํ์ ์ ์ธ ๊ฐ (enum, case ๋ฑ)์ด ๋น๊ต ๊ฐ์ด ์๋ ํ default ๊ตฌ๋ฌธ์ ๋ฐ๋์ ์์ฑํด์ผ ํจ
- ๋จ, default ํค์๋ ์์ด๋ ๋ชจ๋ ๊ฒฝ์ฐ๊ฐ ์ปค๋ฒ ๋์๋ค๋ฉด, default ํค์๋๊ฐ ์์ด๋ ๋จ.
- switch๋ฌธ์ case๋ฅผ ์ฐ์ ์คํ → fallthrough ํค์๋ ์ฌ์ฉ
- fallthrough๋ ์ํ๋ ๋งํผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ ๊ฐ๋ฅ
- Interval Matching
- ๋ฒ์ ์ฐ์ฐ์๋ฅผ ํ์ฉํด, ๋จ์ํ ๊ฐ์ ๋งค์นญํ๋ ๊ฒ์ ๋์ด ๋ค์ํ ํจํด์ ํตํด ๋งค์นญ
func interSwitch(count:Int) { let countedThings = "moons orbiting Saturn" let naturalCount: String switch count { case 0: naturalCount = "no" case 1..<5: naturalCount = "a few" case 5..<12: naturalCount = "several" case 12..<100: naturalCount = "dozens of" case 100..<1000: naturalCount = "hundreds of" default: naturalCount = "many" } print("There are \\(naturalCount) \\(countedThings).") }
- ๋ฒ์ ์ฐ์ฐ์๋ฅผ ํ์ฉํด, ๋จ์ํ ๊ฐ์ ๋งค์นญํ๋ ๊ฒ์ ๋์ด ๋ค์ํ ํจํด์ ํตํด ๋งค์นญ
- whereํค์๋๋ฅผ ์ฌ์ฉํ์ฌ case์ ์กฐ๊ฑด์ ํ์ฅํ ์ ์์
let IceCream: String = "๋น๋น๋น
"
let price: Int = 400
let isDelicious: Bool = false
switch IceCream {
case "๋น๋น๋น
" where isDelicious == true:
print("์์ฃผ ๋ง์๋ค!")
case "๋น๋น๋น
" where price < 1000 && isDelicious == false:
print("\\(IceCream)...? ์ ๊ฐ ๋ณ๋ก ์ซ์ดํ๋๊ฒ์ ์ฌ์ค์
จ๋ค์..")
case "๋น๋น๋น
" where price > 200:
print("์ ์์ฒญ ์ธ๋ค!")
case "๋ฉ๋ก๋":
print("๋ฉ๋ก๋")
default:
print("๋ง์ด ์๋ค์...")
}
// ๋น๋น๋น
...? ์ ๊ฐ ๋ณ๋ก ์ซ์ดํ๋๊ฒ์ ์ฌ์ค์
จ๋ค์..
- ์ด๊ฑฐํ์ case๊ฐ ์ถ๊ฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด unknown์ด๋ผ๋ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋์ฒํ ์ ์์
- ์ด๊ฑฐํ์ ์ ์ํ ๋ชจ๋ case๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ฉด ์ ์์ ์ผ๋ก ์ปดํ์ผ๋๊ฒ ์ง๋ง, ๋์ค์ ์ด๊ฑฐํ์ case๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ๊ธฐ์กด์ switch๋ฌธ์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ → switch๋ฌธ์ด ๋ชจ๋ case์ ๋ํด ๋๋นํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ
enum Menu {
case Pizza
case Chicken
}
let lunchMenu: Menu = .Pizza
switch lunchMenu {
case .Chicken:
print("์๋
์นํจ")
case .Pizza:
print("๋๋ฏธ๋
ธํผ์!")
case _: // default์ ๊ฐ์ ํํ
print("์นํจ์์ค ์ถ๊ฐํด์ฃผ์ธ์")
}
//๋๋ฏธ๋
ธํผ์!
switch ↔ if
let chr = "a"
if chr == "a" {
print("์บ๋ฆญํฐ๋ a ์
๋๋ค.")
}
else if chr == "b" {
print("์บ๋ฆญํฐ๋ b ์
๋๋ค.")
}
//์บ๋ฆญํฐ๋ a ์
๋๋ค.
let chr = "a" //"b" ๋ก ๋ฐ๊พธ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ "์ด๊ฒ์ b ์
๋๋ค."๋ก ๋ฐ๋
switch chr {
case "a" :
print("์ด๊ฒ์ a ์
๋๋ค.")
case "b" :
print("์ด๊ฒ์ b ์
๋๋ค.")
default:
print("์๋ฌด๊ฒ๋ ์ ํ๋์ง ์์์ต๋๋ค.")
}
//์ด๊ฒ์ a ์
๋๋ค.
func loveCalculator() {
let loveScore = Int.random(in: 0...100)
if loveScore > 80 {
print("๋น์ ์ ์๋ก ๋ง์ด ์ฌ๋ํฉ๋๋ค.")
} if loveScore > 40 && loveScore <= 80 {
print("๋น์ ์ ์ธ์ ํ๊ณ ์์ต๋๋ค.")
} else {
print("๋น์ ์ ํ์ ํผ์์
๋๋ค..")
}
}
loveCalculator()
func loveCalculator() {
let loveScore = Int.random(in: 0...100)
switch loveScore {
case 81..100:
print("๋น์ ์ ์๋ก ๋ง์ด ์ฌ๋ํฉ๋๋ค.")
case 41..<81:
print("๋น์ ์ ์ธ์ ํ๊ณ ์์ต๋๋ค.")
case ...40:
print("๋น์ ์ ํ์ ํผ์์
๋๋ค..")
default:
print("๋ค์ ์คํํด์ฃผ์ธ์")
โ ์ธ์ if ๋์ switch๋ฅผ ์ฌ์ฉํ ๊น?
- switch๋ฌธ์ ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ฏธ๋ฆฌ ์ ํด๋์ ์ฌ๋ฌ ๊ฐ๋ค๊ณผ์ ์ผ์น ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ switch๋ฌธ ๋ด์ control flow๋ฅผ ๊ฒฐ์
- if๋ฌธ์ ๋ถ๋ฆฌ์ธ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ด๋๋ ์กฐ๊ฑด๋ฌธ์ ๋ฐ๋ผ true, false์ ํด๋นํ๋ ๊ฐ๊ฐ ๋ ๊ฐ์ ํ๋ฆ์ผ๋ก ๊ฐ๋ผ์ง
- if๋ฌธ์ ์ค์ฒฉ๋๊ฒ ๋ฐฐ์นํ๋ฉด, ๋ ๊ฐ์ ํ๋ฆ๋ฟ๋ง ์๋๋ผ ์ธ ๊ฐ, ๋ค ๊ฐ ๋ฑ๋ฑ.. ๊ทธ ์ด์์ control flow์ ๊ฐ์ง ์ ์๊ฒ ๋จ.
- (if / else if / else์ ๊ฐ์ ๋ฐฉ์)
- if๋ฌธ์ ์ธ ์ ์๋ ๋ชจ๋ ์ํฉ์ switch๋ฌธ์ ์ธ ์ ์๋ ๊ฑด ์๋์ง๋ง, ๋ฐ๋๋ก ๋ชจ๋ switch๋ฌธ์ if๋ฌธ์ผ๋ก ๋์ฒด๋ ์ ์์
→ ํ๋์ ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ทธ ๋ณ์์ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋ฆ์ผ๋ก ์ด๋ํ ์ ์๋ ์ฝ๋๋ฅผ ์ง์ผํ ๋์ switch๋ฌธ๊ณผ if๋ฌธ์ด ๋ ๋ค ์ฌ์ฉ๋ ์ ์์
→ switch๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
2. ๋ฐ๋ณต๋ฌธ
๋ฐ๋ณต๋ฌธ์ ๊ฐ๋
๋ฐ๋ณต๋ฌธ์ด๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋ ๋ธ๋ก์ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ ์ ์๋๋ก ํ๋ ์ ์ด ๊ตฌ์กฐ
for ๋ฐ๋ณต๋ฌธ
- for ๋ฐ๋ณต๋ฌธ์ ํน์ ํ ํ์๋งํผ ์ฝ๋ ๋ธ๋ก์ ์คํํ๊ณ ์ ํ ๋ ์ฌ์ฉ
for index in 1...5 {
print(index)
}
// 1
// 2
// 3
// 4
// 5
let array = [1, 2, 3, 4, 5]
for element in array {
print(element)
}
// 1
// 2
// 3
// 4
// 5
- ์ธ์ ์ฌ์ฉํ๋์?
- ๋ณดํต ์ด๋ ํ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ณ ์ถ์์ง ์๋ ๊ฒฝ์ฐ
- ๋ฐฐ์ด์ด๋ ๋์ ๋๋ฆฌ์ ๊ฐ์ ์ปฌ๋ ์ ์ ๋ํด ๋ฐ๋ณตํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ปฌ๋ ์ ์ ๊ฐ ์์์ ๋ํด ํน์ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฅ์
- ํน์ ํ์ ๋์ ํน์ ์ปฌ๋ ์ ์ ๊ฐ ์์์ ๋ํด ์ฝ๋ ๋ธ๋ก์ ์คํํ ์ ์๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ ์ ๊ณต
- ์ปฌ๋ ์ ๋ฐ๋ณต๊ณผ ๊ด๋ จํ์ฌ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์
While ๋ฐ๋ณต๋ฌธ
- While ๋ฐ๋ณต๋ฌธ์ ํน์ ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ์คํํ๊ณ ์ ํ ๋ ์ฌ์ฉ
var count = 0
while count < 5 {
print(count)
count += 1
}
// 0
// 1
// 2
// 3
// 4
- ์ธ์ ์ฌ์ฉํ๋์?
- ๋ณดํต ์ด๋ ํ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ณ ์ถ์์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ
- ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๊น์ง ํน์ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฅ์
- ๋ฐ๋ณต์ ๋ช ๋ฒ ์คํํด์ผ ํ๋์ง ๋ชจ๋ฅผ ๋ ์ ์ฉํจ
- ๋ชจ๋ ์์์ ๋ํด ๋ฐ๋ณตํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ์ปฌ๋ ์ ์ ๋ฐ๋ณตํ ์ ์์
let numbers = [1, 3, 6, 7, 9, 10, 12]
var index = 0
var firstEvenNumber: Int?
while index < numbers.count && firstEvenNumber == nil {
let number = numbers[index]
if number % 2 == 0 {
firstEvenNumber = number
}
index += 1
}
if let evenNumber = firstEvenNumber {
print("The first even number in the array is \\(evenNumber).")
} else {
print("There are no even numbers in the array.")
}
Repeat-While ๋ฐ๋ณต๋ฌธ
- Repeat-While ๋ฐ๋ณต๋ฌธ์ While ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ์ง๋ง, ์กฐ๊ฑด์ ํ์ธํ๊ธฐ ์ ์ ์ ์ด๋ ํ ๋ฒ์ ์ฝ๋ ๋ธ๋ก์ ์คํ
var count = 0
repeat {
print(count)
count += 1
} while count < 5
// 0
// 1
// 2
// 3
// 4
- ์ธ์ ์ฌ์ฉํ๋์?
- ์กฐ๊ฑด์ ํ์ธํ๊ธฐ ์ ์ ์ฝ๋ ๋ธ๋ก์ ํ ๋ฒ ์ด์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๊น์ง ํน์ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฅ์
- ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ ์ฝ๋ ๋ธ๋ก์ด ์กฐ๊ฑด์ ๊ด๊ณ์์ด ์ ์ด๋ ํ ๋ฒ์ ์คํ๋๋ ๊ฒ์ ๋ณด์ฅํจ
๐ก ๋ฐ๋ณต๋ฌธ ์ ๋ฆฌ
[For ๋ฐ๋ณต๋ฌธ]
- ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ธฐ ์ ๋ฐ๋ณต ํ์๋ฅผ ์ ์ ์์
- ๋ฒ์ ํน์ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ํ์ค๋ฅผ ํตํด ๋ฐ๋ณต
- ๋ฐ๋ณตํ ๋๋ง๋ค ๋ฃจํ ๋ณ์๊ฐ ์๋์ผ๋ก ์ฆ๊ฐ/๊ฐ์
- ์ํ์ค๊ฐ ๋น์ด์๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ด ์ ํ ์คํ๋์ง ์์ ์ ์์
[While ๋ฐ๋ณต๋ฌธ]
- ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ธฐ ์ ๋ฐ๋ณต ํ์๋ฅผ ์ ์ ์์
- ์กฐ๊ฑด์ด ์ฐธ์ธ ๋์ ๋ฐ๋ณต๋ฌธ ์คํ
- ์กฐ๊ฑด์ ๊ฐ ๋ฐ๋ณต์ ์์ ๋ถ๋ถ์์ ํ๊ฐ๋จ
- ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฃจํ ๋ณ์๋ฅผ ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ์๋์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํจ
[Repeat-While ๋ฐ๋ณต๋ฌธ]
- While ๋ฃจํ์ ์ ์ฌํ์ง๋ง ๊ฐ ๋ฐ๋ณต์ ๋ ๋ถ๋ถ์์ ์กฐ๊ฑด์ด ํ๊ฐ๋จ
- ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด์ ํ์ธํ๊ธฐ ์ ์ ํญ์ ํ ๋ฒ ์ด์ ์คํ
๋ฐ์ํ