본문 바로가기

코딩 나도 할 수 있다!!

2024.04.26 (금) 코틀린 계산기 만들기 3

이번에는 작동 방식은 똑같지만 코드만 다른 계산기를 만들어 볼 거다

fun main() {
    var reload = true

    while (reload) {
        println("1번 숫자를 넣어주세요")
        var n1: Double = readLine()!!.toDouble()

        println("다음은 연산부호입니다")

        println("+, -, *, /, %")
        var operator: String = readLine()!!

        println("2번 숫자를 넣어주세요")
        var n2: Double = readLine()!!.toDouble()

        var cl: Double = 0.0



        when (operator) {
            "+" -> cl = Plus().calculate(n1, n2)
            "-" -> cl = Minus().calculate(n1, n2)
            "*" -> cl = Multiply().calculate(n1, n2)
            "/" -> cl = Divide().calculate(n1, n2)
            "%" -> cl = Mod().calculate(n1, n2)
        }


        println("정답은 바로?!?!?!")
        println("${cl}")

        println("한번더? Y/N")
        val onemore = readLine()!!
        if (onemore != "Y") {
            reload = false
        }
    }
}

 

여기까지는 똑같다

다른게 있다면 

 when (operator) {
            "+" -> cl = Plus().calculate(n1, n2)
            "-" -> cl = Minus().calculate(n1, n2)
            "*" -> cl = Multiply().calculate(n1, n2)
            "/" -> cl = Divide().calculate(n1, n2)
            "%" -> cl = Mod().calculate(n1, n2)

 

이 부분에서 원래는

"+" -> cl = Calculator().plus(n1, n2)

 

이렇게 썼다면 이번에는 다르게 썼다는 거다

이 부분에서 어떻게 돌아가는지는 모르겠지만 아무튼 돌아간다

(이건 따로 알아봐야겠다)

 

그리고 다른점은 

open class Calculator {
    open fun calculate(n1: Double, n2: Double): Double {
        return 0.0
    }
}

class Plus : Calculator() {
    override fun calculate(n1: Double, n2: Double): Double {
        return n1 + n2
    }
}

class Minus : Calculator() {
    override fun calculate(n1: Double, n2: Double): Double {
        return n1 - n2
    }
}

class Multiply : Calculator() {
    override fun calculate(n1: Double, n2: Double): Double {
        return n1 * n2
    }
}

class Divide : Calculator() {
    override fun calculate(n1: Double, n2: Double): Double {
        return n1 / n2
    }
}

class Mod : Calculator() {
    override fun calculate(n1: Double, n2: Double): Double {
        return n1 % n2
    }
}

 

 

기존에는 하나의 클래스에 함수들로 채웠다면 이번에는 클래스들을 다 따로 만들었다는 것이다

기능은 다르지 않다

다른 것이 있으면 Calculator 클래스(부모 클래스)의 메서드를 자식 클래스에서 재정의 해서 사용할 수 있게 오버라이딩 한 것이다

 

아직 오버라이딩이라는 것을 정확하게는 잘 모르지만 어떤 느낌인지는 이해를 했다

코드짜는법, 문법 등등 넘어야 할 산들이 너무 많다

아직 등산화끈 묶은 수준이다 (아직 이 수준도 못 올라갔을 수도...)

그러나 묵묵히 산을 오른다면 언제 가는 정상에 오를 수 있을 것이다

그때까지 지치지 않았으면 좋겠다

그러지 않도록 노력도 할 것이다