이 글에서는 switch~case 문을 활용해 간단한 사칙연산 계산기를 만드는 방법을 알아보겠습니다. switch 문은 주어진 표현식을 평가하고, 그 값이 일치하는 case 절을 찾아 해당 case에 연결된 문장들을 실행합니다.
구현할 산술 연산
이번 예제에서 수행할 연산은 다음과 같습니다.
- 덧셈 (+)
- 뺄셈 (-)
- 곱셈 (*)
- 나눗셈 (/)
- 나눗셈의 몫 (Floor Division)
- 나머지 (%)
입력 및 출력 예시
예를 들어 아래와 같은 입력이 주어졌다고 가정해 보겠습니다.
두 개의 입력값: 40.0과 12.0
연산자: %
이때 기대되는 출력 결과는 다음과 같습니다.
결과: 40.0 % 12.0 = 4.0
알고리즘
1단계 - 시작(START)
2단계 - my_input_1, my_input_2, my_result 세 개의 값을 선언하고, operator라는 문자형 변수를 선언한다.
3단계 - 사용자로부터 필요한 값을 입력받거나 값을 직접 정의한다.
4단계 - 'operator' 값을 조건으로 하는 case 문을 정의하여 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 처리한다.
5단계 - 연산자 값을 case 문에 전달하여 두 입력값 'my_input_1'과 'my_input_2' 사이의 산술 연산을 수행한다.
6단계 - 결과를 화면에 출력한다.
7단계 - 종료(STOP)
예제 1: 사용자 입력을 받는 경우
다음 예제에서는 사용자가 직접 값을 입력하는 방식으로 동작합니다. 콘솔에서 두 숫자와 연산자를 차례로 입력받은 후, switch 문으로 해당 연산을 수행합니다.
import java.util.Scanner;
public class OperatorSwitch {
public static void main(String[] args) {
char operator;
Double my_input_1, my_input_2, my_result;
System.out.println("필요한 패키지를 가져왔습니다");
Scanner my_scanner = new Scanner(System.in);
System.out.println("Scanner 객체가 생성되었습니다 ");
System.out.println("첫 번째 숫자를 입력하세요");
my_input_1 = my_scanner.nextDouble();
System.out.println("두 번째 숫자를 입력하세요");
my_input_2 = my_scanner.nextDouble();
System.out.println("다음 연산자 중 하나를 입력하세요: +, -, *, /, %");
operator = my_scanner.next().charAt(0);
switch (operator) {
case '+':
my_result = my_input_1 + my_input_2;
System.out.println(my_input_1 + " + " + my_input_2 + " = " + my_result);
break;
case '-':
my_result = my_input_1 - my_input_2;
System.out.println(my_input_1 + " - " + my_input_2 + " = " + my_result);
break;
case '*':
my_result = my_input_1 * my_input_2;
System.out.println(my_input_1 + " * " + my_input_2 + " = " + my_result);
break;
case '/':
my_result = my_input_1 / my_input_2;
System.out.println(my_input_1 + " / " + my_input_2 + " = " + my_result);
break;
case '%':
my_result = my_input_1 % my_input_2;
System.out.println(my_input_1 + " % " + my_input_2 + " = " + my_result);
break;
default:
System.out.println("선택하신 연산자가 유효하지 않습니다");
break;
}
}
}출력 결과
필요한 패키지를 가져왔습니다
Scanner 객체가 생성되었습니다
첫 번째 숫자를 입력하세요
40
두 번째 숫자를 입력하세요
12
다음 연산자 중 하나를 입력하세요: +, -, *, /, %
%
40.0 % 12.0 = 4.0
예제 2: 값이 미리 정의된 경우
이번에는 사용자 입력 없이 두 숫자와 연산자가 코드 안에서 미리 정의되어 있으며, 그 값을 그대로 사용해 연산 결과를 콘솔에 출력합니다.
public class OperatorSwitch {
public static void main(String[] args) {
char operator;
Double my_input_1, my_input_2, my_result;
my_input_1 = 40.0;
my_input_2 = 12.0;
operator = '%';
System.out.println("두 숫자는 각각 " +my_input_1 +"과 " +my_input_2 +"로 정의되었습니다");
System.out.println("연산자는 " +operator +"로 정의되었습니다");
switch (operator) {
case '+':
my_result = my_input_1 + my_input_2;
System.out.println(my_input_1 + " + " + my_input_2 + " = " + my_result);
break;
case '-':
my_result = my_input_1 - my_input_2;
System.out.println(my_input_1 + " - " + my_input_2 + " = " + my_result);
break;
case '*':
my_result = my_input_1 * my_input_2;
System.out.println(my_input_1 + " * " + my_input_2 + " = " + my_result);
break;
case '/':
my_result = my_input_1 / my_input_2;
System.out.println(my_input_1 + " / " + my_input_2 + " = " + my_result);
break;
case '%':
my_result = my_input_1 % my_input_2;
System.out.println(my_input_1 + " % " + my_input_2 + " = " + my_result);
break;
default:
System.out.println("선택하신 연산자가 유효하지 않습니다");
break;
}
}
}출력 결과
두 숫자는 각각 40.0과 12.0으로 정의되었습니다
연산자는 %로 정의되었습니다
40.0 % 12.0 = 4.0
마무리
switch~case 문을 사용하면 if~else 문을 여러 번 중첩하는 것보다 코드가 훨씬 깔끔하고 가독성이 좋아집니다. 각 case 뒤에 break 문을 반드시 작성해야 의도하지 않은 다음 case로 넘어가는 현상(fall-through)을 방지할 수 있다는 점도 기억해 두세요. 또한 default 절을 활용하면 유효하지 않은 연산자 입력에 대한 예외 처리까지 손쉽게 구현할 수 있습니다.