과제 내용 : 계산기 만들기
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
}
}
추상클래스는 인터페이스와 비슷하면서도 다르다.
추상 메소드로 구상되어 오버라이드하는 인터페이스와 달리 추상 클래스는 이미 만들어진 클래스를 오버라이드 해서 수정하는 것 이다.
추상 클래스는 이미 만들어둔 블럭 몸체(클래스)를 불러와 새로운 블럭(요소들)을 넣거나 빼는 것 이라면
인터페이스는 아에 새로운 블럭을 가져와 넣는 것 이다.
즉 추상 클래스는 설계도면이고
인터페이스는 아에 새로운 외부 자재이다.
쓰임새의 다름은 인지하였으나, 추상클래스와 인터페이스의 차이점을 조금 더 알아보는 것이 중요할 것 같다.
코드 구현 당시 상속에 대해 제대로 인지하지 못하여 상속하지 않고 오버라이드를 하려 했다.
오버라이드를 할려면 반드시 상속을 해야하는 것인데 말이다.
'개발노트 > Kotlin' 카테고리의 다른 글
내일배움캠프 2주차 코틀린기초 5일차 (0) | 2023.07.21 |
---|---|
내일배움캠프 2주차 4일 코틀린기초 과제 수정 및 ++ (0) | 2023.07.20 |
내일배움캠프 2주차 2일 코틀린 기초 (0) | 2023.07.18 |
내일배움캠프 2주차 1일 코틀린 기초 (0) | 2023.07.17 |
스파르타 코딩클럽 앱개발 종합반 1주차 (0) | 2023.06.22 |