코딩 공부/자바(Java)

사칙연산 계산기 (if문과 switch문) - 그리고 형변환에 대해

cagn 2024. 10. 9. 15:31
SMALL

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을 활용해서 잘못된 입력입니다를 출력할 수 있도록 만들었다. 이 과제를 통해서 한 단계 올라간 느낌이어서 기분이 좋았다. 조금씩이라도 배워나가는 것이 좋았다.

LIST