개발노트/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
}
}
추상클래스는 인터페이스와 비슷하면서도 다르다.
추상 메소드로 구상되어 오버라이드하는 인터페이스와 달리 추상 클래스는 이미 만들어진 클래스를 오버라이드 해서 수정하는 것 이다.
추상 클래스는 이미 만들어둔 블럭 몸체(클래스)를 불러와 새로운 블럭(요소들)을 넣거나 빼는 것 이라면
인터페이스는 아에 새로운 블럭을 가져와 넣는 것 이다.
즉 추상 클래스는 설계도면이고
인터페이스는 아에 새로운 외부 자재이다.
쓰임새의 다름은 인지하였으나, 추상클래스와 인터페이스의 차이점을 조금 더 알아보는 것이 중요할 것 같다.
코드 구현 당시 상속에 대해 제대로 인지하지 못하여 상속하지 않고 오버라이드를 하려 했다.
오버라이드를 할려면 반드시 상속을 해야하는 것인데 말이다.