본문 바로가기
Android (Kotlin)/mini projects

[Calculator] 계산기 만들기 lv.3

by 키윤 2023. 11. 30.

Lv3 : AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺기

  • 관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경하기
    • 나머지 연산자(%) 기능은 제외합니다.
  • Lv2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
    • hint. 클래스의 책임(단일책임원칙)

따로 뺀 클래스 안에 함수 만들 생각을 안해서 시간을 엄청 썼다.
그리고 부모 자식 상속 클래스 쓰려고 애먹었는데 필요 없었음... 대신에 상속 어떻게 사용하는지 제대로 공부한거 같다.

클래스가 여러개 있을 때 해야하는 스텝 정리 !

  1. 메인 함수에 인스턴스화 해주기 (객체 생성)
  2. 클래스에 있는 함수를 사용할 때에는 
    (인스턴스화한 객체 이름).(함수이름)(파라미터 값)
    ex. addoperation.addition(number1, number2)
  3. 클래스1 에 부여한 파라미터로 클래스2에 있는 함수를 적용하고 싶을 땐 클래스2를 부모, 클래스1을 자식으로 만들어야함.
  4. 클래스2  앞에 open 작성, 클래스1이름 뒤에 괄호 열고 클래스2의 생성자 이름 적어주기(생성자 이름만 적고 자료형은 적으면 안됨)
  5. 함수 가져오는건 2번과 같음

클래스 단일책임: 코드가 잘 짜여졌는지 확인을 하는 과정에서 곱셈도 해보고 나눗셈도 해보고 덧셈 뺄셈도 해볼텐데 덧셈을 해서 오류가 나면 addoperation 클래스 안에 있는 함수 로직에 문제가 있다는 것을 확인 할 수 있다는 장점이 있다. 

package com.example.mycalculator

//Lv3: AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기),
// DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺기
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.addition(number1, number2))
        in "-" -> println(subtractOperation.subtraction(number1, number2))
        in "/" -> println(divideOperation.division(number1, number2))
        in "*" -> println(multiplyOperation.multiplication(number1, number2))
    }
}

class AddOperation(number1: Double, number2: Double) {
    fun addition(number1: Double, number2: Double): Double = number1 + number2
}

class SubtractOperation(number1: Double, number2: Double) {
    fun subtraction(number1: Double, number2: Double): Double = number1 - number2
}

class MultiplyOperation(number1: Double, number2: Double) {
    fun multiplication(number1: Double, number2: Double): Double = number1 * number2
}

class DivideOperation(number1: Double, number2: Double) {
    fun division(number1: Double, number2: Double): Double = number1 / number2
}