[JAVA] 계산기 만들기1 - 비교 연산자(==) & equals()

림민지·2025년 3월 3일

Today I Learn

목록 보기
13/62

📌 문제점

자바로 계산기를 만드는 중, 연산자를 받아 어떤 연산자인지 if문을 활용해서 구분하고 결과를 출력하는 로직을 구현하고 있었다.
그래서 익숙하게도 아래처럼 코드를 작성했는데

int result = 0;
if (operator == "+") {
	result =add(a,b); //add라는 함수 정의함
}
system.out.println(result); //add라는 함수 정의함

결과가 계속 0으로 나왔다.
분명히 result 변수에 add 함수를 적용해서 값이 바뀌었어야했는데 그러지 않았다.
그 이유가 바로 자바에서 ==.equals()의 차이 때문이었다.


👀 차이점 & 특징

1. == (이중 등호)

  • 기본 데이터 타입(Primitive type) 비교: 값이 같은지 확인
  • 참조 타입(Reference type) 비교: 객체의 주소(메모리 위치)가 같은지 확인

→ 같은 주소(같은 메모리 공간)를 가리키는지

2. equals() 메서드

객체의 내용(값)이 같은지 비교하는 메서드
String, Integer 같은 클래스는 오버라이딩(재정의)되어 있어 내용 비교를 한다.
→ 객체의 내용이 같은지 비교


✨ 코드 개선

if (operator.equals("+")) {
	CalculatorClass.add(a,b);
    } 
else if (operator.equals("-"){
	CalculatorClass.subtract(a,b);
	} 
else if (operator.equals("*")){
	CalculatorClass.multiply(a,b);
    }
else if (operator.equals("/")){
	CalculatorClass.divide(a,b);
    }

.equals("+")를 사용해서 입력받는 사칙연산 기호를 구분하고 if-else로 처리할 수 있도록 했다.

전체 코드 (클래스 구분X)

import java.util.Scanner;

public class Calculator2Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in) ;
        boolean system = true;

        do {
            System.out.print("첫 번째 정수를 입력하세요 : ");
            int a = scanner.nextInt();
            System.out.print("두 번째 정수를 입력하세요 : ");
            int b = scanner.nextInt();
            System.out.print("사칙연산 기호를 입력하세요: ");
            String operator = scanner.next();
            if (operator.equals("+")) {
                CalculatorClass.add(a,b);
            } else if (operator.equals("-")){
                CalculatorClass.subtract(a,b);
            } else if (operator.equals("*")) {
                CalculatorClass.multiply(a,b);
            } else if (operator.equals("/")){
                CalculatorClass.divide(a,b);
            }
            System.out.println("더 계산하시겠습니까? 아무 문자나 입력하세요. (exit 입력 시 종료)");
            String ask = scanner.next();
            if (ask.equals("exit")){
                system = false;
                System.out.println("시스템을 종료합니다");
            }
        }while (system);

    }
}

    //더하기
    static void add(int a, int b){
        System.out.println("결과 : "+(a+b));
    }
    //빼기
    static void subtract(int a, int b){
        System.out.println("결과 : "+(a-b));
    }
    //곱하기
    static void multiply(int a, int b){
        System.out.println("결과 : "+(a*b));
    }
    //나누기
    static void divide(int a, int b) {
        if (b == 0) {
            System.out.println("수행할 수 없는 연산입니다");
        }else {
            System.out.println("결과 : "+(double) a/b);
        }
    }
profile
@lim_128

0개의 댓글