Kotlin

내일배움캠프 12.07 TIL

공부처음하는사람 2023. 12. 22. 20:50

1주차 과제 계산기만들기

package calculator

fun main() {
    val calculator = Calculator()
    println("연산 방식을 선택해주세요.")
    println("1 : 더하기, 2 : 빼기, 3 : 곱하기, 4 : 나누기")
    val method = readln().toInt()
    println("수를 입력해주세요.")
    val number1 = readln().toDouble()
    println("수를 입력해주세요.")
    val number2 = readln().toDouble()
    var answer = 0
    when (method) {
        1 -> println("계산결과 : ${calculator.add(AddOperation(), number1, number2)} 입니다.")


        2 -> println("계산결과 : ${calculator.substract(SubstractOperation(), number1, number2)} 입니다.")


        3 -> println("계산결과 : ${calculator.multiply(MultiplyOperation(), number1, number2)} 입니다.")


        4 -> println("계산결과 : ${calculator.divide(DivideOperation(), number1, number2)} 입니다.")


        else -> println("ERROR. 다시 시도하세요.")

    }
}

Main.KT
readln기능을 사용해 연산방식, 수를 키보드에서 입력받아 연산식으로 이동하게끔 구현했다.
이 과정에서 난 이전에 조건문에 실행문을 두가지를 붙여서 결과값만 나오게끔 억지구현을 했는데
승한님이 number 변수를 추가하는 방식을 추천해주셔서 적용해보았는데 보기 훨씬 깔끔했다.

package calculator

class Calculator {
    fun add(addOperation: AddOperation, num1: Double, num2: Double): Double {
        return addOperation.operation(num1, num2)
    }

    fun substract(substractOperation: SubstractOperation, num1: Double, num2: Double): Double {
        return substractOperation.operation(num1, num2)
    }

    fun multiply(multiplyOperation: MultiplyOperation, num1: Double, num2: Double): Double {
        return multiplyOperation.operation(num1, num2)
    }

    fun divide(divideOperation: DivideOperation, num1: Double, num2: Double): Double {
        return divideOperation.operation(num1, num2)
    }
}

Calculator.kt
각각 연산법의 클래스들과 calculator 클래스를 연결(?)했다. addOperation: AddOperation을 메소드에 입력해 연산식을 불러올 수 있었다.
여기서 한가지 배운점은 메소드의 기본 구조 add(변수: 자료형, 변수: 자료형) : 반환자료형 으로 생각을 하고 있어서 도대체 왜 AddOperation이 자료형 자리에 들어가는지 이해가 가지 않았다.
그래서 튜터님께 질문을 한 결과, 자료형이 아닌 객체도 불러올 수 있고, 또 다르게 생각하면
addOperation : String이 들어온다고하면 이상하지 않다. 왜냐면 String은 자료형이니까!
그런데 사실 String도 Class의 개념이라고 하셨다. Class개념인 String도 들어오는데 AddOperation이
못들어올 이유는 없지 않은가? 이 원리는 추후에 학습하며 공부를 해야겠다.

package calculator

class AddOperation {
    fun operation(num1 : Double, num2 : Double) : Double = num1 + num2
}

AddOperation.kt
딱히 설명할 내용이 있는 코드는 아니니 생략..

package calculator

class SubstractOperation {
    fun operation(num1 : Double, num2 : Double) : Double = num1 - num2
}

SubstractOperation.kt

package calculator

class MultiplyOperation {
    fun operation(num1 : Double, num2 : Double) : Double = num1 * num2
}

MultiplyOperation.kt

package calculator

class DivideOperation {
    fun operation(num1 : Double, num2 : Double) : Double = num1 / num2
}

DivideOperation.kt


회고

package calculator

fun main() {
    var calculator = Calculator()
        println("연산 방식을 선택해주세요.")
        println("1 : 더하기, 2 : 빼기, 3 : 곱하기, 4 : 나누기")
    var method = readLine()!!.toInt()
    when (method) {
        1 -> {println("수를 입력해주세요. (한 자리씩 등록)")
            println("계산결과 : ${calculator.add(readLine()!!.toInt(), readLine()!!.toInt())} 입니다.")
        }
        2 -> {println("수를 입력해주세요. (한 자리씩 등록)")
            println("계산결과 : ${calculator.substract(readLine()!!.toInt(), readLine()!!.toInt())} 입니다.")
        }
        3 -> {println("수를 입력해주세요. (한 자리씩 등록)")
            println("계산결과 : ${calculator.multiply(readLine()!!.toInt(), readLine()!!.toInt())} 입니다.")
        }
        4 -> {println("수를 입력해주세요. (한 자리씩 등록)")
            println("계산결과 : ${calculator.divide(readLine()!!.toInt(), readLine()!!.toInt())} 입니다.")
        }

    }

승한님이 피드백주시기 전 버전의 Main.kt이다.
값이 나오는 것에만 초점을 두고 구현을 하려고 하니 이런 괴물이 탄생하게 되었다.
내가 쓴 코드이지만 어지러운데 남이 보면 얼마나 보기 어려울까?
항상 생각을 하며 최적화를 하려고 노력을 해야겠다.
하지만!! 지금은 기능구현에만 집중하도록 하자. 구현하기도 벅차다ㅋㅋㅋ

어제부터 시작해서 오늘로 첫 주차 기본과제 계산기 만들기 과제를 제출했다.
lv.3 까지는 필수구현이고 lv.4부터는 선택인데, lv.3까지도 솔직히 검색하고 코드공유받아서 겨우 작성했다.
내 능력으로 만든 코드는 아니라고 생각한다. 분명히 3주차 강의를 수강하면 만들 수 있다고 적혀있는데,
내가 부족해서인지 강의탓을 하게되는 것 같긴하다. (솔직히 위 코드에 안배운 내용이 많음 ㅠㅠ)

문법공부를 스스로 많이 해야겠다고 느꼈고, 뭐든 많이 만들면서 적응을 해야할 것 같다.
어떻게 어떻게 구현하시오. 라는 설명을 들으면 그냥 생각이 멈춘다. 도저히 어디서부터 시작을 해야 할 지 감이 안온다. 사실 첫 술에 배부를 순 없다고 생각을 하긴 하나 다른사람들을 보면 괜히 급해지고, 자신감이 사라지는 것은 사실인 것 같다.

그만큼 내가 더 노력하는 수 밖에 없겠지만!
오늘은 승한님 스터디 주제가 계산기 관련 주제이니 한번 더 공부하고 2시정도 까지 강의를 들어야겠다.

내일도 강의, 모레도 강의! 당분간 강의만 들으며 공부할 것 같다.

'Kotlin' 카테고리의 다른 글

내일배움캠프 12.09 TIL  (0) 2023.12.22
내일배움캠프 12.08 TIL  (2) 2023.12.22
순수 함수  (0) 2023.12.22
내일배움캠프 12.06 TIL  (2) 2023.12.22
객체지향 프로그래밍  (2) 2023.12.22