728x90
오늘은 캠프에서 제공하는 강의를 듣고 내용을 활용해 콘솔에서 작동하는 간단한 계산기 하나를 만들었다.
Lv1. Calculator Class를 만들고 클래스를 이용해 연산하기
더보기
CalculatorMain.kt
package com.example.week2_homework
fun main(){
println("이 프로그램은 두 정수 사이에서 간단한 사칙연산을 실행하는 계산기입니다.")
var operator: String = ""
while (true) {
println("아래 보기 중 사용할 번호를 입력하세요.")
println("1. 더하기")
println("2. 빼기")
println("3. 곱하기")
println("4. 나누기")
val input3 = readln()
when(input3){
"+", "-", "*", "/" -> {
operator = input3
break
}
"1" -> {
operator = "+"
break
}
"2" -> {
operator = "-"
break
}
"3" -> {
operator = "*"
break
}
"4" -> {
operator = "/"
break
}
else -> {
println("잘못된 입력입니다.")
}
}
}
//Calculator 인스턴스를 생성해 클래스 내부의 init실행
val calc = Calculator()
when(operator){
"+" -> calc.addFun()
"-" -> calc.subtractFun()
"*" -> calc.multiplyFun()
"/" -> calc.divideFun()
}
}
더보기
Calculator Class
package com.example.week2_homework
class Calculator() {
var num1 = 0
var num2 = 0
// 인스턴스 생성과 동시에 num1, num2 입력
init {
//숫자를 입력할 때까지 반복
while (true) {
println("첫번째 수를 입력하세요.")
val input1 = readln()
if(input1.all{ it.isDigit() }){
num1 = input1.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
//숫자를 입력할 때까지 반복
while (true) {
println("두번째 수를 입력하세요.")
val input2 = readln()
if(input2.all{ it.isDigit() }){
num2 = input2.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
}
//operator에 따라 사용할 함수 작성
fun addFun(){
val answer = num1 + num2
println("num1 + num2 = ${answer}입니다.")
}
fun subtractFun(){
val answer = num1 - num2
println("num1 - num2 = ${answer}입니다.")
}
fun multiplyFun(){
val answer = num1 * num2
println("num1 * num2 = ${answer}입니다.")
}
fun divideFun(){
val answer = num1 / num2
println("num1 / num2 = ${answer}입니다.")
}
위와 같이 Calculator 클래스를 따로 파일에 만들고 main에 인스턴스를 만들었다.
main은 시작과 동시에 필요한 연산자를 입력하고 잘못 입력했을 경우 메세지를 띄우며 다시 입력을 요구하는 코드를 작성했다. 인스턴스를 선언함과 동시에 init을 이용해 num1, num2를 받아오고 이 후 main에서 선언된 연산자의 종류에 따라 다른 결과를 출력하는 기능을 구현했다.
Lv2. 반복기능 추가하기, 나머지 연산 추가하기, -1입력 시 종료하기
더보기
CalculatorMain.kt
package com.example.week2_homework
fun main(){
println("이 프로그램은 두 수 사이에서 간단한 사칙연산을 실행하는 계산기입니다.")
var operator = ""
while (true) {
println("아래 보기 중 사용할 기능의 번호를 입력하세요.")
println("1. 더하기 \t 2. 빼기 \t 3. 곱하기 \t 4. 나누기 \t 5. 나머지")
println("-1을 입력하면 계산기가 종료됩니다.")
val input1 = readln()
when (input1) {
"1" -> {
println("더하기를 선택했습니다.")
operator = "+"
}
"2" -> {
println("빼기를 선택했습니다.")
operator = "-"
}
"3" -> {
println("곱하기를 선택했습니다.")
operator = "*"
}
"4" -> {
println("나누기를 선택했습니다.")
operator = "/"
}
"5" -> {
println("나머지를 선택했습니다.")
operator = "%"
}
"-1" -> {
println("계산기를 종료합니다.")
break
}
else -> {
println("잘못된 입력입니다.")
continue
}
}
var calc = Calculator(operator)
}
}
.
더보기
Calculator Class
package com.example.week2_homework
// operator는 main에서 받아와서 사용
class Calculator(_operator: String){
//변수 선언
var operator = _operator
var num1 = 0
var num2 = 0
//operator에 따라 사용할 함수 작성
fun addFun(){
println("\nnum1 + num2 = ${num1 + num2}입니다.\n")
}
fun subtractFun(){
println("\nnum1 - num2 = ${num1 - num2}입니다.\n")
}
fun multiplyFun(){
println("\nnum1 * num2 = ${num1 * num2}입니다.\n")
}
fun divideFun(){
println("\nnum1 / num2 = ${num1 / num2}입니다.\n")
}
fun moduloFun(){
println("\nnum1 % num2 = ${num1 % num2}입니다.\n")
}
init {
//숫자를 입력할 때까지 반복
while (true) {
println("첫번째 수를 입력하세요.")
val input2 = readln()
if(input2.all{ it.isDigit() }){
num1 = input2.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
//숫자를 입력할 때까지 반복
while (true) {
println("두번째 수를 입력하세요.")
val input3 = readln()
if(input3.all{ it.isDigit() }){
num2 = input3.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
//Calculator 인스턴스를 생성해 클래스 내부의 init실행
when(operator){
"+" -> addFun()
"-" -> subtractFun()
"*" -> multiplyFun()
"/" -> divideFun()
"%" -> moduloFun()
}
}
}
문제에서는 Class에 반복기능을 넣으라고 했지만 문제를 똑바로 안읽고 반복기능을 main에 집어넣어버렸다. operator를 받아오는 부분을 Class에 넣으면 됐을텐데...
Lv3. 각 연산 기능을 가진 다른 Class를 만들고 관계 만들기
더보기
CalculatorMain.kt
package com.example.week2_homework
fun main(){
println("이 프로그램은 두 정수 사이에서 간단한 사칙연산을 실행하는 계산기입니다.\n")
// 무한루프를 통해 -1을 입력받지 않으면 프로그램을 반복
while (true) {
println("아래 보기 중 사용할 기능의 번호를 입력하세요.")
println("1. 더하기 \t 2. 빼기 \t 3. 곱하기 \t 4. 나누기")
println("-1을 입력하면 계산기가 종료됩니다.")
val input1 = readln()
when (input1) {
"1" -> {
println("더하기를 선택했습니다.")
val calc = AddOperation()
}
"2" -> {
println("빼기를 선택했습니다.")
val calc = SubstractOperation()
}
"3" -> {
println("곱하기를 선택했습니다.")
val calc = MultiplyOperation()
}
"4" -> {
println("나누기를 선택했습니다.")
val calc = DivideOperation()
}
"-1" -> {
println("계산기를 종료합니다.")
break
}
else -> {
println("잘못된 입력입니다.\n")
continue
}
}
}
}
더보기
Calculator Class
package com.example.week2_homework
// 부모 Class로 사용하기위해 open, 함수 제거
// 어떤 연산이든 수를 입력받는 공통부분을 부모클래스에 남김
open class Calculator(){
//변수 선언
var num1 = 0
var num2 = 0
init {
//숫자를 입력할 때까지 반복
while (true) {
println("첫번째 수를 입력하세요.")
val input2 = readln()
if(input2.all{ it.isDigit() }){
num1 = input2.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
//숫자를 입력할 때까지 반복
while (true) {
println("두번째 수를 입력하세요.")
val input3 = readln()
if(input3.all{ it.isDigit() }){
num2 = input3.toInt()
break
}else{
println("잘못된 입력입니다.")
}
}
}
fun addFun(){
println("\nnum1 + num2 = ${num1 + num2}입니다.\n")
}
fun substractFun(){
println("\nnum1 + num2 = ${num1 + num2}입니다.\n")
}
fun multiplyFun(){
println("\nnum1 * num2 = ${num1 * num2}입니다.\n")
}
fun divideFun(){
//나누기 0에 대한 예외처리
if(num2 == 0){
println("\n0으로는 나눌 수 없습니다.\n")
}
else{
println("\nnum1 / num2 = ${num1 / num2}입니다.\n")
}
}
}
더보기
AddOperation Class
package com.example.week2_homework
class AddOperation() : Calculator(){
init {
addFun()
}
}
더보기
SubstractOperation Class
package com.example.week2_homework
class SubstractOperation: Calculator() {
init {
substractFun()
}
}
더보기
MultiplyOperation Class
package com.example.week2_homework
class MultiplyOperation: Calculator() {
init {
multiplyFun()
}
}
더보기
DivideOperation Class
package com.example.week2_homework
class DivideOperation: Calculator() {
init {
divideFun()
}
}
처음에는 각 연산을 클래스별로 함수가 아닌 코드형태로 나누었는데 뭔가 부족한것 같았다. 특히 부모 자식 클래스간의 관계에 대해 잘 모르겠어서 튜터님께 질문을 드렸다. 튜터님께서 부모클래스에 있는 메서드를 자식클래스에 넣어보는게 어떻냐고 하셔서 그렇게 코드를 작성해보았다.
Lv3의 최적화와 Lv4에대한 도전은 내일 할 예정이다.
728x90
'개발' 카테고리의 다른 글
| 03/11 간단한 키오스크 만들기(1) (0) | 2024.03.11 |
|---|---|
| 03/08 간단한 계산기 만들기(3) (0) | 2024.03.08 |
| 03/07 간단한 계산기(2) (0) | 2024.03.07 |
| 02/28 ~ 03/04 Mini Project - Project II(Introduce I) (0) | 2024.03.04 |
| 02/26~02/27 Mini Project - Project II(Introduce I) (0) | 2024.02.27 |