- Lv4 : AddOperation(더하기), SubtractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation라는 클래스명으로 만들어 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다.
- Lv3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
- hint. 클래스간의 결합도, 의존성(의존성역전원칙)
- Lv3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
lv3를 하면서 상속이랑 클래스 개념을 제대로 익혀서 그런지 상대적으로 시간이 덜 걸렸다.
간단한 추상 클래스 예제를 정독하고 문제를 풀어줬다!
아래 링크 예제 정독만 하면 바로 풀 수 있다 !!
https://velog.io/@k906506/Kotlin-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4-VS-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
package com.example.mycalculator
//- Lv4 : AddOperation(더하기), SubtractOperation(빼기), MultiplyOperation(곱하기),
// DivideOperation(나누기) 연산 클래스들을 AbstractOperation라는 클래스명으로 만들어 사용하여 추상화하고
// Calculator 클래스의 내부 코드를 변경합니다.
//- Lv3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
//- hint. 클래스간의 결합도, 의존성(의존성역전원칙)
fun main() {
// 입력 값
print("숫자를 입력하세요 : ")
var number1 = readLine()!!.toDouble()
print("연산자를 입력하세요 : ")
var operator = readLine()!!
print("숫자를 입력하세요 : ")
var number2 = readLine()!!.toDouble()
// 객체 인스턴스화해주기
var addOperation = AddOperation(number1, number2)
var subtractOperation = SubtractOperation(number1, number2)
var multiplyOperation = MultiplyOperation(number1, number2)
var divideOperation = DivideOperation(number1, number2)
when (operator) {
in "+" -> println(addOperation.operation(number1, number2))
in "-" -> println(subtractOperation.operation(number1, number2))
in "/" -> println(divideOperation.operation(number1, number2))
in "*" -> println(multiplyOperation.operation(number1, number2))
}
}
class AddOperation(number1: Double, number2: Double) : abstractOperation(number1, number2) {
override fun operation(number1: Double, number2: Double): Double = number1 + number2
}
class SubtractOperation(number1: Double, number2: Double) : abstractOperation(number1, number2) {
override fun operation(number1: Double, number2: Double): Double = number1 - number2
}
class MultiplyOperation(number1: Double, number2: Double) : abstractOperation(number1, number2) {
override fun operation(number1: Double, number2: Double): Double = number1 * number2
}
class DivideOperation(number1: Double, number2: Double) : abstractOperation(number1, number2) {
override fun operation(number1: Double, number2: Double): Double = number1 / number2
}
abstract class abstractOperation(val number1: Double, val number2: Double) {
abstract fun operation(number1: Double, number2: Double): Double
}
lv3와 비교해서 개선된점.
- 전에는 addoperation에 addoperation안에 있는 함수 addition을 호출해서 결과값을 가져왔다. 그런데 이제 abstract클래스를 통해서 addoperation을 하면서 공통적인 operation함수를 호출해서 결과값을 가져올 수 있어서 코드가 더 깔끔해지고 가독성도 높아지고 이해하기 쉬워지고 수정하기도 편해진다. 아래 링크 정독해보면 도움 될듯..
https://devroach.tistory.com/58
'Android (Kotlin) > mini projects' 카테고리의 다른 글
[Hotel Reservation] 호텔 예약 프로그램 lv.1.1 (0) | 2023.12.02 |
---|---|
[Hotel Reservation] 호텔 예약 프로그램 lv.1.0 (0) | 2023.12.01 |
[Calculator] 계산기 만들기 lv.3 (0) | 2023.11.30 |
[Calculator] 계산기 만들기 lv.2.1 (0) | 2023.11.30 |
[Calculator] 계산기 만들기 lv.2.0 (0) | 2023.11.29 |