
위에 이미지처럼
+,-,*,/ 사칙연산 만드는 문제였습니다.
문제를 보고 함수로 코드를 짜면 되겠다. 하고 생각했는데
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는 쉽게 풀어가지 않을까 생각이 듭니다.