[Kotlin] Calculator 만들기

[Kotlin] Calculator 만들기

Main.kt

package com.example.myapplication

fun main() {
    
    println("첫번째 값을 입력해주세요 : ")
    var num1= readLine()!!.toDouble()
    println("두번째 값을 입력해주세요 : ")
    var num2= readLine()!!.toDouble()

    println("번호를 선택해주세요.\n1. 더하기(+)\n2. 빼기(-)\n3. 곱하기(-)\n4. 나누기(/)")
    var button= readLine()!!.toInt()

    //계산기 호출
    var calc =Calculator(AddOperation())
    var sub=SubstractOperation()
    var mul=MultiplyOperation()
    var div=DivideOperation()
    var result : Double

    when(button){
        1-> {
            result = calc.operate(num1, num2)
            println("(${num1}) 더하기 (${num2}) 는 (${result}) 입니다.")
        }
        2-> {
            calc= Calculator(sub)
            result = calc.operate(num1,num2)
            println("(${num1}) 빼기 (${num2}) 는 (${result}) 입니다.")
        }
        3-> {
            calc=Calculator(mul)
            result = calc.operate(num1, num2)
            println("(${num1}) 곱하기 (${num2}) 는 (${result}) 입니다.")
        }
        4-> {
            calc=Calculator(div)
            result = calc.operate(num1, num2)
            println("(${num1}) 나누기 (${num2}) 는 (${result}) 입니다.")
        }
        else-> {
            println("올바르지 않은 번호입니다.\n번호를 다시입력해주세요")
        }
    }


}

Class Calculator

class Calculator(private val operation: AbstractOperation){
    fun operate(a:Double,b:Double):Double{
        return operation.operate(a,b)
    }

}

Class AbstractOperation

//추상 클래스는 기본적인 설계만 정의 되있는 구체화되지않은 클래스이다.
//클래스 내의 프로퍼티나 메소드도 abstract로 선언가능,초기값선언도 가능!
abstract class AbstractOperation {
    //하지만 추상메소드이기때문에 하위 클래스에서 반드시 재정의해야한다.
    abstract fun operate(a:Double,b:Double):Double
}

Class AddOperation

class AddOperation : AbstractOperation(){
    override fun operate(a: Double, b: Double): Double {
        return a + b
    }
}

Class SubstractOperation

class SubstractOperation : AbstractOperation(){
    override fun operate(a: Double, b: Double): Double{
        return a - b
    }
}

Class MultiplyOperation

class MultiplyOperation : AbstractOperation(){
    override fun operate(a: Double, b: Double): Double {
        return a * b
    }
}

Class DivideOperation

class DivideOperation : AbstractOperation(){
    override fun operate(a: Double, b: Double): Double {
        return a / b
    }
}

결과

cal_result


© 2023. All rights reserved.

AgileCatch