계산기 만들기
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 |