Android 앱개발 공부/TIL(Today I Learned)

[Android] TIL 13일차

bunny code 2024. 6. 7. 20:30

계산기 만들기


Lv.1  더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만들고, 클래스를 이용하여 연산을 진행하고 출력하기

 

* 첫 번째 작성 코드

package com.example.myproject1

fun main(){

    print("첫 번째 숫자를 입력하세요 : ")
    var number1 = readLine()!!.toInt()
    print("두 번째 숫자를 입력하세요 : ")
    var number2 = readLine()!!.toInt()

    var test = Calculator(number1,number2)

    println("number1 + number2 = ${test.plusResult}")
    println("number1 - number2 = ${test.minusResult}")
    println("number1 * number2 = ${test.multipleResult}")
    println("number1 / number2 = ${test.divisionResult}")
    }
 
 class Calculator(num1:Int,num2:Int) {
    var plusResult = num1 + num2
    var minusResult = num1 - num2
    var multipleResult = num1 * num2
    var divisionResult = num1 / num2
}

-> Calculator 클래스에 사칙연산 변수 선언과 함께 공식을 작성
-> 변수 number1과 number2를 사용자로부터 입력받고 입력받은 문자열(String)을 Int 자료형으로 변환하도록 선언

-> 입력받은 number1, number2를 Calculator 클래스로 넘기고 해당 결괏값을 test 변수에 적용

-> println문과 변수 test를 사용하여 plusResult, minusResult, multipleResult, divisionResult 값을 출력한다.

 

* 1차 피드백

-> 클래스에 변수 선언만 하지 말고 메소드(함수)까지 사용해서 작성할 것

-> 위 코드 같은 경우 변수 test에 이미 결괏값이 다 넣어져 있는 상태라 코드 효율이 떨어짐, 원하는 결괏값만 특정해서 가져올 수 있도록 클래스 내부에 메소드를 작성할 것

 

 

* 두 번째 작성 코드

package com.example.myproject1

fun main(){

    print("첫 번째 숫자를 입력하세요 : ")
    var number1 = readLine()!!.toInt()
    print("두 번째 숫자를 입력하세요 : ")
    var number2 = readLine()!!.toInt()

    var test = Calculator()

    println("number1 + number2 = ${test.plus(number1,number2)}")
    println("number1 - number2 = ${test.minus(number1,number2)}")
    println("number1 * number2 = ${test.multiple(number1,number2)}")
    println("number1 / number2 = ${test.division(number1,number2)}")
}

class Calculator() {
    fun plus(num1:Int,num2:Int):Int{
        return num1+num2
    }
    fun minus(num1:Int,num2:Int):Int{
        return num1-num2
    }
    fun multiple(num1:Int,num2:Int):Int{
        return num1*num2
    }
    fun division(num1:Int,num2:Int):Int{
        return num1/num2
    }

}

-> 피드백을 받고 클래스 내부에 사칙연산 각각의 메소드를 작성

-> test.메소드명 방식으로 작성하여 원하는 사칙연산 결괏값만 가져올 수 있도록 수정

 

 

Lv.2  Lv.1에서 만든 Calculator 클래스에 출력 이후 추가 연산을 가능하도록 코드를 추가하고, 연산 진행 후 출력하기 : Lv.1에서 만든 Calculator 클래스에 나머지 연산자(%)를 추가하기. 그리고 -1을 입력할 때까지 계산을 반복합니다.(-1 입력 시 반복 종료) 콘솔에서 (1번 +, 2번 -, 3번 *, 4번 /, 5번 %)을 입력하면 연산 진행합니다.

 

* 세 번째 작성 코드

package com.example.myproject1

fun main(){

    val exitnumber = -1

    while (true){
    	print("숫자를 입력하세요 ${exitnumber}를 입력하면 종료됩니다. : ")
    	var input = readLine()!!.toInt()
        
        if(input == exitnumber){
            break
        }

        print("첫 번째 숫자를 입력하세요 : ")
        var number1 = readLine()!!.toInt()

        print("두 번째 숫자를 입력하세요 : ")
        var number2 = readLine()!!.toInt()

        var test = Calculator()

		println("number1 + number2 = ${test.plus(number1, number2)}")
		println("number1 - number2 = ${test.minus(number1,number2)}")
		println("number1 * number2 = ${test.multiple(number1,number2)}")
		println("number1 / number2 = ${test.division(number1,number2)}")
		println("number1 % number2 = ${test.remainder(number1,number2)}")
        }

    }
}



class Calculator() {
    fun plus(num1: Int, num2: Int): Int {
          return num1 + num2
    }

    fun minus(num1: Int, num2: Int): Int {
        return num1 - num2
    }

    fun multiple(num1: Int, num2: Int): Int {
        return num1 * num2
    }

    fun division(num1: Int, num2: Int): Int {
        return num1 / num2
    }

    fun remainder(num1: Int, num2: Int): Int {
        return num1 % num2
    }
}

 

-> Calculator 클래스에 나머지 연산자(%) 추가 작성

-> -1을 입력할 때까지 계산 반복 조건은 while 무한루프문(true)과 if문을 이용하여 작성

-> input 변수를 추가 작성해서 -1을 입력받으면 첫 번째, 두 번째 숫자를 입력하기 전에 종료(break)하도록 작성

-> 콘솔 입력하는 것은 추후에 진행

 

* 2차 피드백

->  input 추가 작성한 부분은 지우고 첫 번째 숫자(number1)에 -1을 입력받으면 바로 종료되도록 수정할 것, 해당 부분만 수정하고 바로 콘솔 입력 코드 작성해도 됨

 

 

* 네 번째 작성코드(Lv.2 완성)

package com.example.myproject1

fun main(){

    val exitnumber = -1

    while (true){

        print("첫 번째 숫자를 입력하세요 ${exitnumber}를 입력하면 종료됩니다. : ")
        var number1 = readLine()!!.toInt()
        if(number1 == exitnumber){
            break
        }

        print("두 번째 숫자를 입력하세요 : ")
        var number2 = readLine()!!.toInt()

        print("연산 번호를 입력하세요 : ")
        var calculation = readLine()!!

        var test = Calculator()

        when{
            calculation == "1" -> {
                println("number1 + number2 = ${test.plus(number1, number2)}")
            }
            calculation == "2" -> {
                    println("number1 - number2 = ${test.minus(number1,number2)}")
            }
            calculation == "3" -> {
                println("number1 * number2 = ${test.multiple(number1,number2)}")
            }
            calculation == "4" -> {
                println("number1 / number2 = ${test.division(number1,number2)}")
            }
            calculation == "5" -> {
                println("number1 % number2 = ${test.remainder(number1,number2)}")
            }

        }

    }
}



class Calculator() {
    fun plus(num1: Int, num2: Int): Int {
          return num1 + num2
    }

    fun minus(num1: Int, num2: Int): Int {
        return num1 - num2
    }

    fun multiple(num1: Int, num2: Int): Int {
        return num1 * num2
    }

    fun division(num1: Int, num2: Int): Int {
        return num1 / num2
    }

    fun remainder(num1: Int, num2: Int): Int {
        return num1 % num2
    }
}

-> 피드백을 받고 input 내용은 삭제, 삭제한 내용은 number1에 작성

-> 콘솔 입력 부분은 when 조건문을 사용하여 작성 (문자 "1" 입력 시 더하기, "2" 입력 시 빼기... , "5" 입력 시 나머지 형식으로 작성)

 

 

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

(관계를 맺은 후 필요하다면 Calculator 클래스의 내부 코드를 변경하기, 나머지 연산자(%) 기능은 제외합니다.)

 

* 다섯 번째 작성코드

package com.example.myproject1

fun main(){

    val exitnumber = -1

    while (true){

        print("첫 번째 숫자를 입력하세요 ${exitnumber}를 입력하면 종료됩니다. : ")
        var number1 = readLine()!!.toInt()
        if(number1 == exitnumber){
            break
        }

        print("두 번째 숫자를 입력하세요 : ")
        var number2 = readLine()!!.toInt()

        print("연산 번호를 입력하세요 : ")
        var calculation = readLine()!!

        var _plus = AddOperation(number1,number2)
        var _minus = SubstractOperation(number1,number2)
        var _multiple = MultiplyOperation(number1, number2)
        var _division = DivideOperation(number1, number2)

        when{
            calculation == "1" -> {
                println("number1 + number2 = ${_plus.plus(number1, number2)}")
            }
            calculation == "2" -> {
                println("number1 - number2 = ${_minus.minus(number1,number2)}")
            }
            calculation == "3" -> {
                println("number1 * number2 = ${_multiple.multiple(number1,number2)}")
            }
            calculation == "4" -> {
                println("number1 / number2 = ${_division.division(number1,number2)}")
            }

        }

    }
}



open class Calculator(num1: Int, num2: Int)

class AddOperation(num1: Int, num2: Int) : Calculator2(num1, num2) {
    fun plus(num1: Int, num2: Int): Int {
        return num1 + num2
    }
}

class SubstractOperation(num1: Int, num2: Int) : Calculator(num1, num2) {
    fun minus(num1: Int, num2: Int): Int {
        return num1 - num2
    }
}

class MultiplyOperation(num1: Int, num2: Int) : Calculator(num1, num2) {
    fun multiple(num1: Int, num2: Int): Int {
        return num1 * num2
    }
}

class DivideOperation(num1: Int, num2: Int) : Calculator(num1, num2) {
    fun division(num1: Int, num2: Int): Int {
        return num1 / num2
    }
}

-> 나머지 연산자(%) 코드 내용 삭제, Calculator 클래스를 open 키워드를 활용해서 부모 클래스로 변경

-> 밑에 사칙연산 차례대로 자식 클래스 작성

 

* 3차 피드백

-> 부모 클래스에 메소드를 작성 후 자식클래스에서 그걸 받아 재설계(오버라이딩) 하도록 수정할 것

 

 

* 여섯 번째 작성코드(Lv.3 완성)

package com.example.myproject1

fun main(){

    val exitnumber = -1

    while (true){

        print("첫 번째 숫자를 입력하세요 ${exitnumber}를 입력하면 종료됩니다. : ")
        var number1 = readLine()!!.toInt()
        if(number1 == exitnumber){
            break
        }

        print("두 번째 숫자를 입력하세요 : ")
        var number2 = readLine()!!.toInt()

        print("연산 번호를 입력하세요 : ")
        var calculation = readLine()!!

        var _plus = AddOperation()
        var _minus = SubstractOperation()
        var _multiple = MultiplyOperation()
        var _division = DivideOperation()

        when{
            calculation == "1" -> {
                println("number1 + number2 = ${_plus.operation(number1, number2)}")
            }
            calculation == "2" -> {
                println("number1 - number2 = ${_minus.operation(number1,number2)}")
            }
            calculation == "3" -> {
                println("number1 * number2 = ${_multiple.operation(number1,number2)}")
            }
            calculation == "4" -> {
                println("number1 / number2 = ${_division.operation(number1,number2)}")
            }

        }

    }
}



open class Calculator(){
    open fun operation(num1:Int, num2:Int) :Int {
        return num1
    }
}

class AddOperation() : Calculator() {
    override fun operation(num1: Int, num2: Int): Int {
        return num1+num2
    }
}

class SubstractOperation() : Calculator() {
    override fun operation(num1: Int, num2: Int): Int {
        return num1 - num2
    }
}

class MultiplyOperation() : Calculator() {
    override fun operation(num1: Int, num2: Int): Int {
        return num1 * num2
    }
}

class DivideOperation() : Calculator() {
    override fun operation(num1: Int, num2: Int): Int {
        return num1 / num2
    }
}

-> 피드백을 받고 부모 클래스에 operation 메소드 작성(자식 클래스에 상속해야 하니 open 키워드 추가)

-> operation return 값은 출력하지 않을 거라 임의로 작성

-> 나머지 자식 클래스들 내부 메소드는 operation 메소드를 가져와 재설계(오버라이딩)해서 return값 변경

 

 

 

과제 진행하면서 느낀 점


함수 활용 능력이 많이 부족하다는 걸 느꼈다. 문제 내용을 보고 무슨 함수를 써야 할지 어떻게 코드를 써야 깔끔할지 내가 직접 생각하고 작성해야 하는데 그러질 못해서 정말 많이 헤맸다.

 

특히 조건문과 반복문을 같이 쓰는 코드를 작성할 때 정말 오래 걸렸는데 관련 코드 문제를 많이 풀면서 익혀야겠다고 느꼈다.

'Android 앱개발 공부 > TIL(Today I Learned)' 카테고리의 다른 글

[Android] TIL 15일차  (0) 2024.06.11
[Android] TIL 14일차  (2) 2024.06.10
[Android] TIL 12일차  (0) 2024.06.05
[Android] TIL 11일차  (2) 2024.06.04
[Android] TIL 10일차  (0) 2024.06.03