[Swift] 3. 프로그래밍 기본 원리와 조건문
1. 프로그래밍 기본 원리
- 순차
- 조건
- 반복
순차
-
개발자가 정한 규칙으로 실행한다.
print("1") print("2") print("3")
조건(if)
-
조건이 참이면 {}를 실행하고 거짓이면 아무 직업도 하지 않는다.
-
참과 거짓을 판단할 수 있는 문장을 조건이라고 부르고, 조건을 콤마로 여러개 연결 가능하다(and연산자이다).
-
⚠️ if문에서 ,(콤마)는 and 역할이다.
if 참과 거짓을 판단할 수 있는 문장 { }
조건(switch)
- if문보다 한정적인 상황에서 사용한다.
- 각각의 case 에 break을 사용할 필요 없다.
- 가능한 모든 경우의 수를 다루어야 한다.
- 반드시 default문이 있어야 한다. (모든 케이스를 빠짐없이 봐야하기 때문)
- default문에는 일을 안한다면 break문을 써야 한다.
- fallthrough: 무조건 아래 문장 실행해라.
- 범위 연산자/패턴 매칭 연산자를 사용해라.
- ⚠️ switch문에서 ,(콤마)는 or 역할이다.
- ⚠️ case에서 부등식을 사용할 수 없다 범위 연산자로 만들어진 범위 값으로 케이스를 정의해야 한다.
-
기본 방식
switch 변수 { case 값1: // code case 값2, 값3: // code case 값4: // code default: break // 실행하려는 코드가 없으면 반드시 break 입력 }
-
패턴 매칭
switch age { case 10...19: // 10...19 ~= age // code case 20...29: // code case 30...39: // code default: break }
-
case를 조건에 따라 처리하는 경우
switch num { case let x where x%2==0: // num변수를 x 상수에 바인딩 후, where 조건절에서 케이스가 조건에 해당하는지 여부 확인 print("짝수 숫자: \(x)") default: print("홀수 숫자: \(num)") }
범위 연산자
-
… 연산자
0...50 // 0부터 50까지 0..<5 // 0, 1, 2, 3 ,4 ..<0 // 정수의 범위에서 가장 낮은 숫자부터 0까지
패턴 매칭 연산자
-
~= 연산자
-
오른쪽 변수가 왼쪽 범위에 포함되는지에 따라 참과 거짓을 알려주는 연산자
0...50 ~= num // 0~50 범위내에 num이 속한다면 Bool 타입으로 알려주는 기호
if | switch |
---|---|
조건 2개 사용가능 및 응용 범위가 넓다 | if문보다 가독성이 좋다 실제 앱개발 시 분기처리에 많이 사용한다 |
2. 연습문제
연습문제1
/*
가위 / 바위 / 보 게임을 if문을 사용해서 구현해 봅니다. 컴퓨터는 가 위, 바위, 보 중에서 랜덤(무작위)으로 선택하게 되고, 당신은 한가지 를 고릅니다.
그리고 결과적으로
“무승부입니다.”, “당신은 졌습니다.”, “당신이 이겼습니다.” 이 셋 중에 한가지가 출력되도록 합니다.
가위: 0
바위: 1
보: 2
*/
// 컴퓨터가 무작위로 선택(0, 1, 2)
// 사용자: 0, 1, 2 중 입력
print("(가위: 0, 바위: 1, 보: 2)입력: ", terminator: "")
let comNum: Int = Int.random(in: 0...2)
let user: String = readLine()!
if let userNum = Int(user) {
if 0...2~=userNum {
if userNum == 0, comNum == 0 {
print("무승부")
} else if userNum == 0, comNum == 1 {
print("패배")
} else if userNum == 0, comNum == 2 {
print("승리")
}
else if userNum == 1, comNum == 0 {
print("승리")
}
else if userNum == 1, comNum == 1 {
print("무승부")
}
else if userNum == 1, comNum == 2 {
print("패배")
}
else if userNum == 2, comNum == 0 {
print("패배")
}
else if userNum == 2, comNum == 1 {
print("승리")
}
else if userNum == 2, comNum == 2 {
print("무승부")
}
} else {
print("0~2 사이의 값을 입력하세요")
}
} else {
print("숫자를 입력해주세요")
}
개선1
@main
struct Main {
static func main() {
let comNum: Int = Int.random(in: 0...2)
print("(가위: 0, 바위: 1, 보: 2) 입력: ", terminator: "")
// 안전한 입력 처리
guard let userInput = readLine(), let userNum = Int(userInput), (0...2).contains(userNum) else {
print("❌ 0~2 사이의 숫자를 입력하세요.")
return
}
// 승패 판별 로직 (배열 활용)
let resultMatrix = [
["무승부", "패배", "승리"], // userNum == 0 (가위)
["승리", "무승부", "패배"], // userNum == 1 (바위)
["패배", "승리", "무승부"] // userNum == 2 (보)
]
let result = resultMatrix[userNum][comNum]
print("컴퓨터: \(comNum) → 결과: \(result)")
}
}
개선2
@main
struct Main {
static func main() {
let comNum = Int.random(in: 0...2) // 0: 가위, 1: 바위, 2: 보
print("(가위: 0, 바위: 1, 보: 2) 입력: ", terminator: "")
// 안전한 입력 처리
guard let userInput = readLine(), let userNum = Int(userInput), (0...2).contains(userNum) else {
print("❌ 0~2 사이의 숫자를 입력하세요.")
return
}
print("컴퓨터: \(comNum), 사용자: \(userNum)")
// 승패 판별 로직 (switch 문 활용)
switch (userNum, comNum) {
case let (u, c) where u == c:
print("무승부")
case (0, 1), (1, 2), (2, 0): // 사용자가 졌을 경우
print("패배")
case (0, 2), (1, 0), (2, 1): // 사용자가 이긴 경우
print("승리")
default:
print("오류 발생")
}
}
}
연습문제2
/*
컴퓨터가 1부터 10사이의 정수에서 랜덤 값을 선택하고, 저장하 도록 합니다. 그리고 당신은 1부터 10사이의 정수를 선택합니다.
컴퓨터가 선택한 랜덤값과 당신의 값을 비교하고 당신의 숫자가 더 높은 경우는 “Down”, 당신의 숫자가 더 낮은 경우는 “Up”, 당신의 숫자와 동일한 경우 “Bingo”가 출력되도록 합니다.
*/
while true {
print("1부터 10 사이 원하는 숫자를 입력하세요(힌트: \(comNum)): ", terminator: "")
let userNum = readLine()!
if let userNum = Int(userNum) {
// if !(0...10).contains(userNum) {}
/*
switch userNum {
case let x where !(0...10).contains(x):
print("❌ 1부터 10 사이의 숫자를 입력하세요.")
default:
print("✅ 입력한 숫자: \(userNum)")
}
*/
/*
switch userNum {
case 0...10:
// print("🎉 입력한 숫자: \(userNum), 컴퓨터 숫자: \(comNum)")
default:
print("❌ 1부터 10 사이의 숫자를 입력하세요.")
}
*/
switch userNum {
case let x where x == comNum:
print("Bingo")
return
case let x where x > comNum:
print("Down")
case let x where x < comNum:
print("Up")
default:
print("❌ 1부터 10 사이의 숫자를 입력하세요.")
}
}
}
Leave a comment