수정한 부분
- 추상클래스의 주생성자를 이용해야한다는 피드백을 받았다. 추상클래스에 주생성자를 추가하긴 했지만 그 안에 추상 함수에 매개변수를 또 작성해서 장황하게 코드를 작성했었다. 또 전 코드에서는 추상클래스를 통해서 메인 함수에 추상함수를 불러오는게 아닌 추상함수를 바로 호출했었다. 추상클래스를 사용하면서 단일책임원칙을 지키지 않았던 것 같다. 지난번에 마무리하면서 메인 함수 내부에 들어가는 코드가 조금 아쉽다는 생각이 계속 들었었는데 이번에 제대로 수정한 것 같다. 장황하게 적혀져있던 메개 변수들도 전부 지울 수 있어서 코드가 매우 깔끔해졌다.
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()
when (operator) {
in "+" -> println(AddOperation(number1, number2).operation())
in "-" -> println(SubtractOperation(number1, number2).operation())
in "/" -> println(DivideOperation(number1, number2).operation())
in "*" -> println(MultiplyOperation(number1, number2).operation())
}
}
class AddOperation(number1: Double, number2: Double) : AbstractOperation(number1, number2) {
override fun operation(): Double = number1 + number2
}
class SubtractOperation(number1: Double, number2: Double) : AbstractOperation(number1, number2) {
override fun operation(): Double = number1 - number2
}
class MultiplyOperation(number1: Double, number2: Double) : AbstractOperation(number1, number2) {
override fun operation(): Double = number1 * number2
}
class DivideOperation(number1: Double, number2: Double) : AbstractOperation(number1, number2) {
override fun operation(): Double = number1 / number2
}
abstract class AbstractOperation(val number1: Double, val number2: Double) {
abstract fun operation(): Double
}
'Android (Kotlin) > mini projects' 카테고리의 다른 글
animation 화면 슬라이드 전환 구현 (0) | 2023.12.29 |
---|---|
[Hotel Reservation] 호텔 예약 프로그램 lv.3.1 (1) | 2023.12.04 |
[Hotel Reservation] 호텔 예약 프로그램 lv.3.0 (1) | 2023.12.03 |
[Hotel Reservation] 호텔 예약 프로그램 lv.2.1 (0) | 2023.12.03 |
[Hotel Reservation] 호텔 예약 프로그램 lv2.0 (0) | 2023.12.02 |