Dart 문제 사칙연산

SeonHo·2024년 8월 16일

Dart

목록 보기
5/13
post-thumbnail

위에 이미지처럼
+,-,*,/ 사칙연산 만드는 문제였습니다.

문제를 보고 함수로 코드를 짜면 되겠다. 하고 생각했는데

class 로 만드는 문제였습니다.

'먼저 함수로 코드를 짜보고' class로 변환해야지 생각하고

// 1. main() 함수

import '연습.dart';
import 'dart:io';

void main(){
  bool calculate = true;

  while(calculate){
    stdout.write('계산식:');
    String input = stdin.readLineSync()!;

    if(input.toLowerCase() == 'exit'){
      calculate = false;
      break;
    }
    Calculate(input);
  }
}
// 2. 연습() 함수
String Calculate(String input){
  List<String> inputSp = input.split('');
  int inputF = int.parse(inputSp[0]);
  int inputS = int.parse(inputSp[2]);
  String operation = inputSp[1];

  if(input.contains(operation)) {
    switch (operation) {
      case '+':
        return (inputF + inputS).toString();
      case '-':
        return (inputF - inputS).toString();
      case '*':
        return (inputF * inputS).toString();
      case '/':
        return (inputF ~/ inputS).toString();
      default:
        return '';
    }
  } else {
    return '';
  }
}
// 3. main() 함수 값 출력

import '연습.dart';
import 'dart:io';

void main(){
  bool calculate = true;

  while(calculate){
    stdout.write('계산식:');
    String input = stdin.readLineSync()!;

    if(input.toLowerCase() == 'exit'){
      calculate = false;
      break;
    }
    String result = Calculate(input);
    print('계산결과:$result');
    print('');
  }
}

함수로 만들었습니다.

그런데 class로 변환하는 부분에서 시간이 많이 걸렸습니다.
class 이론은 조금 알고 있어서 constructor 부분까지는
쉽게 코드를 작성했습니다.

import 'dart:io';

class Calculator {
  int firstN;
  int secondN;
  String operation;

  Calculator(this.firstN, this.secondN, this.operation);

함수 코드를 어떻게 메서드 부분으로 변환시키지?

 String Calculate(String input){
  List<String> inputSp = input.split('');
  int inputF = int.parse(inputSp[0]);
  int inputS = int.parse(inputSp[2]);
  String operation = inputSp[1];

  if(input.contains(operation)) {
    switch (operation) {
      case '+':
        return (inputF + inputS).toString();
      case '-':
        return (inputF - inputS).toString();
      case '*':
        return (inputF * inputS).toString();
      case '/':
        return (inputF ~/ inputS).toString();
      default:
        return '';
    }
  } else {
    return '';
  }
}

자바에서 메서드는 class의 행동이라고 알고 있었지만
위에 함수 코드를 보고 class constructor 보면서
메서드로 바꿀려고 하니 시간이 오래 걸렸습니다.

메서드는 행동이닌깐
'함수에서 동작하는 부분만 가져오자' 해서

switch (operation) {
	case '+':
    	return (inputF + inputS).toString();
    case '-':
        return (inputF - inputS).toString();
    case '*':
        return (inputF * inputS).toString();
    case '/':
        return (inputF ~/ inputS).toString();
    default:
        return '';
    }

property 를 참고하고 메서드를 만들었습니다.

import 'dart:io';

class Calculator {
  int firstN;
  int secondN;
  String operation;

  Calculator(this.firstN, this.secondN, this.operation);

  String callOP() {
    switch (operation) {
      case '+' :
        return (firstN + secondN).toString();
      case '-' :
        return (firstN - secondN).toString();
      case '*' :
        return (firstN * secondN).toString();
      case '/' :
        return (firstN ~/ secondN).toString();
      default :
        return '';
    }
  }
}

Java 는 객체의 상태(속성)를 field 라고 하지만
Dart 는 property 라고 강사님께서 말씀해주셨습니다.

이제 동작시킬 main()을 만들고

void main() {
    bool calculate = true;

    while (calculate) {
      stdout.write('계산식:');
      String input = stdin.readLineSync()!;

      if (input.toLowerCase() == 'exit') {
        calculate = false;
        break;
      }

여기서 입력부분을 넣어줬습니다.

      List<String> inputSp = input.split('');
      int inputF = int.parse(inputSp[0]);
      int inputS = int.parse(inputSp[2]);
      String operation = inputSp[1];

      Calculator calc = Calculator(inputF, inputS, operation);
      calc.callOP();
    }
  }

최종 코드

import 'dart:io';

class Calculator {
  int firstN;
  int secondN;
  String operation;

  Calculator(this.firstN, this.secondN, this.operation);

  String callOP() {
    switch (operation) {
      case '+' :
        return (firstN + secondN).toString();
      case '-' :
        return (firstN - secondN).toString();
      case '*' :
        return (firstN * secondN).toString();
      case '/' :
        return (firstN ~/ secondN).toString();
      default :
        return '';
    }
  }
}
  void main() {
    bool calculate = true;

    while (calculate) {
      stdout.write('계산식:');
      String input = stdin.readLineSync()!;

      if (input.toLowerCase() == 'exit') {
        calculate = false;
        break;
      }

      List<String> inputSp = input.split('');
      int inputF = int.parse(inputSp[0]);
      int inputS = int.parse(inputSp[2]);
      String operation = inputSp[1];

      Calculator calc = Calculator(inputF, inputS, operation);
      String result = calc.callOP();
      print('결과: $result');
    }
  }

벨로그에 작성하닌깐 혼동되는 부분들이 정리되는거 같습니다.
다음번 class 문제를 풀때는 메서드 부분 작성할 때
함수 기능만 긁어서 메서드를 수정하면
class는 쉽게 풀어가지 않을까 생각이 듭니다.

profile
목표를 달성하자!

0개의 댓글