사칙연산 계산기 (if문과 switch문) - 그리고 형변환에 대해
if문을 배우고 나서, 사칙연산 계산기를 만들라는 과제가 주어졌기 때문에, if문을 4개 사용해서 만들었다.
이 당시에는 else 키워드를 배우지 않았기 때문에, else는 사용하지 않았다.
import java.util.Scanner;
public class ControlExam {
public static void main(String[] args) {
// 변수선언
int num1 = 0;
String op;
int num2 = 0;
// 기능
Scanner sc; // 레퍼런스변수선언
sc = new Scanner(System.in); // 객체생성
System.out.print("Num1 input : ");
num1 = sc.nextInt();
System.out.print("symbol input : ");
op = sc.next();
System.out.print("Num2 input : ");
num2 = sc.nextInt();
if(op.equals("+")) {
System.out.println(num1+op+num2+"="+(num1+num2));
}
if(op.equals("-")) {
System.out.println(num1+op+num2+"="+(num1-num2));
}
if(op.equals("*")) {
System.out.println(num1+op+num2+"="+(num1*num2));
}
if(op.equals("/")) {
System.out.println(num1+op+num2+"="+(num1/num2));
}
}
}
- 첫번째 숫자를 받고, 사칙연산 기호를 받고, 두번째 숫자를 받고 그 연산자에 따라서 계산하는 코드이다. 하지만, 이렇게 하니 더하기, 빼기, 곱하기는 잘 적용되었지만, 나누기를 하면 값이 이상해지는 결과가 나오게 되었다.
그래서 그 후로 형 변환에 대해서 배우게 되었다.
형 변환(Casting)
- 자동형변환 : 서로 다른 타입을 가지고 연산할 때 자동으로 형이 변환된다.
- 강제형변환 : 개발자가 특정 목적에 따라서 강제로 형태를 변환하는 것을 말한다.
자동형변환은 가벼운 공간에서 무거운 공간으로 이루어진다.
기본 타입에서는 boolean(논리형)이 가장 가볍고, double(실수형)이 가장 무겁다.
그리고 레퍼런스 타입인 객체와 배열은 기본 타입보다 무겁다고 한다.
후에 물어본 것이지만, 객체와 배열은 서로 가볍다 무겁다 비교하긴 애매하지만, 굳이 따지자면 배열이 더 무겁다고 한다. (객체가 여러 개가 들어갈 수 있으므로.. 객체인 String과 String이 여러 개가 있는 배열 String[]을 생각하면 된다.)
그리고 강제형변환은 형변환을 할 변수 앞에 괄호로 변환할 타입을 묶으면 된다.
예를 들어 a라는 변수를 int로 변환하려면
(int)a;
의 느낌처럼 하면 된다.
그 후 switch문으로 사칙연산 계산기를 만들라는 과제를 받고 나서, 나는 형변환을 적용해서 만들었다.
import java.util.Scanner;
public class SwitchExam {
public static void main(String[] args) {
// 숫자입력
int num1 = 0;
int num2 = 0;
String op;
Scanner sc = new Scanner(System.in);
System.out.print("Num1 input : ");
num1 = sc.nextInt();
System.out.print("symbol input : ");
op = sc.next();
System.out.print("Num2 input : ");
num2 = sc.nextInt();
switch(op) {
case "+": System.out.println(num1+op+num2+"="+(num1+num2)); break;
case "-": System.out.println(num1+op+num2+"="+(num1-num2)); break;
case "*": System.out.println(num1+op+num2+"="+(num1*num2)); break;
case "/": System.out.println(num1+op+num2+"="+((double)num1/num2)); break;
default: System.out.println("잘못된 입력입니다....");
}
}
}
이것은 이전의 if문과 똑같은 형태로, 모든 case에 break를 사용해서 그 스위치가 조건이 같아서 on이 되어서 내용을 출력한다음에 break가 off로 빠져나오게 해서, 딱 맞는 내용만 출력하게 만들었다.
그리고, default을 활용해서 잘못된 입력입니다를 출력할 수 있도록 만들었다. 이 과제를 통해서 한 단계 올라간 느낌이어서 기분이 좋았다. 조금씩이라도 배워나가는 것이 좋았다.