개발노트/Kotlin

내일배움캠프 코틀린기초 2주차 3일 과제수행 계산기

시계속세상은아직돌아가는중 2023. 7. 19. 19:38

과제 내용 : 계산기 만들기

package com.example.myapplication

fun main(){
    var runCalculator = Calculator()
    runCalculator.cal()

}
package com.example.myapplication

class Calculator{
    fun cal(){
        var isEnd:Boolean = false //종료 여부 판단하는 변수
        var addOperation = AddOperation()
        var subOperation = SubtractOperation()
        var mulOperation = MultiplyOperation()
        var divOperation = DivideOperation()

        while (!isEnd) { // isEnd가 False이면 무한반복
            println("숫자를 입력해주세요")
            var num1 = readln()!!.toDouble()
            var num2 = readln()!!.toDouble()
            var result: Double = 0.0
            println("연산자를 입력해주세요(+,-,/,*,%) 종료를 원하시면 '종료'를 입력하세요")
            var operator = readln()!!.toString()

            when (operator) {
                "+" -> result = addOperation.operate(num1 = num1, num2 = num2)
                "-" -> result = subOperation.operate(num1 = num1, num2 = num2)
                "*" -> result = mulOperation.operate(num1 = num1, num2 = num2)
                "/" -> result = divOperation.operate(num1 = num1, num2 = num2)
                "%" -> result = num1 % num2
                "종료" ->  isEnd = true // isEnd를 True로 만들어서 루프종료

                else -> {
                    println("잘못 입력하였습니다. 다시 입력해 주세요.")
                }
            }
            if (operator == "종료"){
                println("종료되었습니다.")
            } else{
                println("결과값은 ${result}입니다")

            }
        }

    }
}
package com.example.myapplication

open abstract class AbstractOperation{
    abstract fun operate(num1 : Double, num2 : Double): Double
}
class AddOperation: AbstractOperation() {
    override fun operate(num1: Double, num2: Double): Double {
        return num1 + num2
    }
}

class SubtractOperation:AbstractOperation(){
    override fun operate(num1: Double, num2: Double): Double {
        return num1-num2
    }
}

class MultiplyOperation: AbstractOperation(){
    override fun operate(num1: Double, num2: Double): Double {
        return num1*num2
    }
}

class DivideOperation:AbstractOperation(){
    override fun operate(num1: Double, num2: Double): Double {
        return num1/num2
    }
}

추상클래스는 인터페이스와 비슷하면서도 다르다.

추상 메소드로 구상되어 오버라이드하는 인터페이스와 달리 추상 클래스는 이미 만들어진 클래스를 오버라이드 해서 수정하는 것 이다.

 

추상 클래스는 이미 만들어둔 블럭 몸체(클래스)를 불러와 새로운 블럭(요소들)을 넣거나 빼는 것 이라면

인터페이스는 아에 새로운 블럭을 가져와 넣는 것 이다.

즉 추상 클래스는 설계도면이고
인터페이스는 아에 새로운 외부 자재이다.

 

쓰임새의 다름은 인지하였으나, 추상클래스와 인터페이스의 차이점을 조금 더 알아보는 것이 중요할 것 같다.

 

코드 구현 당시 상속에 대해 제대로 인지하지 못하여 상속하지 않고 오버라이드를 하려 했다.

오버라이드를 할려면 반드시 상속을 해야하는 것인데 말이다.