오늘은 그동안 배운 내용을 통해 간단한 계산기 프로그램을 만들어보는 과제를 받았다. 옛날 학교에서 했었는데 새로 배운 언어로 하니 걱정도 살짝 되었다.
나는 AbstractOperation.kt에서 클래스를 관리하도록 추상 클래스를 만들었다.
abstract class AbstractOperation {
abstract fun operate(num1: Int, num2: Int): Double
}
Calculator 클래스를 만들어 AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들과 관계를 맺었다.
class Calculator(private val operation: AbstractOperation){
fun operate(num1: Int, num2: Int):Double {
return operation.operate(num1,num2)
}
}
class AddOperation() : AbstractOperation() {
override fun operate(n1: Int, n2: Int): Double {
return (n1 + n2).toDouble()
}
}
class SubstractOperation : AbstractOperation() {
override fun operate(n1: Int, n2: Int): Double {
return (n1 - n2).toDouble()
}
}
class MultiplyOperation : AbstractOperation() {
override fun operate(n1: Int, n2: Int): Double {
return (n1 * n2).toDouble()
}
}
class DivideOperation : AbstractOperation() {
override fun operate(n1: Int, n2: Int): Double {
return (n1 / n2).toDouble()
}
}
전체적인 파일은 이러하다.
메인에서는 키보드로 숫자와 연산 기호를 입력받고 when문을 통해 연산기호에 따라 연산이 이루어지도록 했다.
fun main() {
val input_num1 = print("숫자:")
val num1 = readLine()!!.toInt()
val input_op = print("연산 기호:")
val operator = readLine()!!.toString()
val input_num2 = print("숫자:")
val num2 = readLine()!!.toInt()
when (operator) {
"+" -> {
val add = Calculator(AddOperation()).operate(num1,num2)
println("$num1 + $num2 결과는 : ${add}입니다.")
}
"-" -> {
val sb = Calculator(SubstractOperation()).operate(num1,num2)
println("$num1 - $num2 결과는 : ${sb}입니다.")
}
"*" -> {
val mp = Calculator(MultiplyOperation()).operate(num1,num2)
println("$num1 × $num2 결과는 : ${mp}입니다.")
}
"/" -> {
val dv = Calculator(DivideOperation()).operate(num1,num2)
println("$num1 ÷ $num2 결과는 : ${dv}입니다.")
}
}
}
다음에 수정할 내용은 when문에 예외처리를 추가 하는 것이다. 저번에 when문에 꼭 else를 넣는다고 공부했는데 까먹었다..ㅎㅎ 이번 기회로 한 번 더 생각해보게 되었다.