과제 내용: Swift 기본 문법을 사용하여 나만의 계산기 만들기
- [ ] 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만들기
- [ ] 생성한 클래스를 이용하여 연산을 진행하고 출력
- [ ] 오류가 날 수 있는 ‘예외처리’ 상황에 대해 고민해보기
- 구현을 할 수 없어도 괜찮아요! 다음 단계를 밟아가면서 준비하는 단계입니다.
- [ ] Lv1에서 만든 Calculator 클래스에 “나머지 연산”이 가능하도록 코드를 추가하고, 연산 진행 후 출력
- ex) 나머지 연산 예시 : 6을 3으로 나눈 나머지는 0 / 5를 3으로 나눈 나머지는 2
- [ ] 오류가 날 수 있는 ‘예외처리’ 상황에 대해 고민해보기 + 구현하기
- [ ] 아래 각각의 클래스들을 만들고 클래스간의 관계를 고려하여 Calculator 클래스와 관계 맺기
- [ ] AddOperation(더하기)
- [ ] SubtractOperation(빼기)
- [ ] MultiplyOperation(곱하기)
- [ ] DivideOperation(나누기)
- [ ] Calculator 클래스의 내부코드를 변경
- [ ] 관계를 맺은 후 필요하다면 별도로 만든 연산 클래스의 인스턴스를 Calculator 내부에서 사용
- Lv2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
- hint. 클래스의 책임(단일책임원칙)
- [ ] AbstractOperation라는 **추상화된** 프로토콜 만들기
- [ ] 기존에 구현한 AddOperation(더하기), SubtractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 클래스들과 관계를 맺고 Calculator 클래스의 내부 코드를 변경
- [ ] 스위프트의 어떤 문법을 이용하여 추상화할 수 있을지 생각해 봅시다
class Calculator {
// 더하기
func add(_ num1: Int, _ num2: Int) {
print("num1 + num2 = ", num1 + num2)
}
// 빼기
func sub(_ num1: Int, _ num2: Int) {
print("num1 - num2 = ", num1 - num2)
}
// 곱하기
func mul(_ num1: Int, _ num2: Int) {
print("num1 * num2 = ", num1 * num2)
}
// 나누기
func div(_ num1: Int, _ num2: Int) {
print("num1 / num2 = ", num1 / num2)
}
}
let calculator = Calculator() // 인스턴스 생성하여 변수에 할당
calculator.add(10, 5) // 10 + 5 = 15
calculator.sub(2, 7) // 2 - 7 = -5
calculator.mul(3, 9) // 3 * 9 = 27
calculator.div(6, 4) // 6 / 4 = 1
위 코드로 인해 아래의 목표를 완료했다.
나머지 목표를 완료하기 위해 예외처리 항목을 찾아보았다.
num2가 0일때의 예외 처리를 해야된다.class Calculator {
// 더하기
func add(_ num1: Int, _ num2: Int) {
print("\(num1) + \(num2) = ", num1 + num2)
}
// 빼기
func sub(_ num1: Int, _ num2: Int) {
print("\(num1) - \(num2) = ", num1 - num2)
}
// 곱하기
func mul(_ num1: Int, _ num2: Int) {
print("\(num1) * \(num2) = ", num1 * num2)
}
// 나누기
func div(_ num1: Int, _ num2: Int) {
// guard를 사용하여 예외처리
guard num2 != 0 else {
return print("Error : 0으로 나눌 수 없습니다.")
}
print("\(num1) / \(num2) = ", num1 / num2)
}
}
// 예외처리 테스트
calculator.div(6, 0) // 실행 안 됨 (에러 메시지만 출력)
위 코드들을 사용해 모든 목표를 완료했다.


