안녕하세요, 코딩하는곰입니다. 오늘은 자바 프로그래밍의 가장 기본이 되는 비교 연산자에 대해 깊이 있게 알아보겠습니다. 20년 넘게 자바를 다루어 오면서 발견한 비교 연산자의 미묘한 차이와 실무에서 자주 발생하는 실수들, 그리고 이를 피하는 방법을 공유하려고 합니다. 자바 초보자부터 중급 개발자까지 모두 유용하게 활용할 수 있는 내용으로 준비했으니 끝까지 함께 해주세요!
자바에서 제공하는 기본적인 비교 연산자에는 다음과 같은 것들이 있습니다:
== (동등 연산자): 두 값이 같은지 비교!= (부등 연산자): 두 값이 다른지 비교< (작음 연산자): 왼쪽 값이 오른쪽 값보다 작은지 비교> (큼 연산자): 왼쪽 값이 오른쪽 값보다 큰지 비교<= (작거나 같음 연산자): 왼쪽 값이 오른쪽 값보다 작거나 같은지 비교>= (크거나 같음 연산자): 왼쪽 값이 오른쪽 값보다 크거나 같은지 비교int a = 10;int b = 20;System.out.println(a == b); // falseSystem.out.println(a != b); // trueSystem.out.println(a < b); // trueSystem.out.println(a >= b); // false
기본형(Primitive type) 변수에서는 이러한 연산자가 직관적으로 동작합니다. 하지만 참조형(Reference type)에서는 상황이 달라지는데, 이에 대해서는 다음 섹션에서 자세히 설명드리겠습니다.
많은 자바 개발자들이 참조 타입 비교에서 실수를 합니다. 특히 ==와 equals()의 차이를 이해하지 못해 발생하는 버그가 매우 흔합니다.
String str1 = new String("Hello");String str2 = new String("Hello");System.out.println(str1 == str2); // false (메모리 주소 비교)System.out.println(str1.equals(str2)); // true (내용 비교)
객체 비교 시 ==는 메모리상의 동일한 객체인지 비교하는 반면, equals()는 객체의 내용이 같은지 비교합니다. 따라서 문자열이나 커스텀 객체를 비교할 때는 대부분 equals()를 사용해야 합니다.
또 다른 주의점은 NullPointerException 방지입니다:
String str3 = null;// System.out.println(str3.equals("Hello")); // NullPointerExceptionSystem.out.println("Hello".equals(str3)); // 안전한 비교 방식
로또 당첨 확률을 높이고 싶다면, AI 기반 번호 분석과 QR코드 스캔 기능을 제공하는 지니로또AI를 사용해보세요.
20년 간의 경험에서 자주 본 비교 연산자 관련 실수들을 공유합니다:
double d1 = 0.1 + 0.2;double d2 = 0.3;System.out.println(d1 == d2); // false!// 올바른 방법System.out.println(Math.abs(d1 - d2) < 0.00001); // true
Integer i1 = 127;Integer i2 = 127;System.out.println(i1 == i2); // true (캐시 범위 내)Integer i3 = 128;Integer i4 = 128;System.out.println(i3 == i4); // false (캐시 범위 밖)
enum Color { RED, GREEN, BLUE }Color c1 = Color.RED;Color c2 = Color.RED;System.out.println(c1 == c2); // Enum은 == 비교 가능 (안전함)
매일 두뇌 운동을 위한 스도쿠가 필요하다면, 한국어와 영어를 지원하는 스도쿠 저니를 다운로드하세요.
비교 연산자는 자바 프로그래밍의 가장 기본이지만, 그만큼 실수하기도 쉽습니다. 오늘 배운 내용을 바탕으로 여러분의 코드에서 발생할 수 있는 비교 관련 버그를 미리 방지하시길 바랍니다. 특히 참조 타입 비교와 부동소수점 비교는 꼭 주의해 주세요. 다음 시간에는 더 유익한 자바 팁으로 찾아뵙겠습니다. 감사합니다! 코딩하는곰이었습니다. 😊
시간을 측정해야 하는 다양한 상황에서, 간단하고 직관적인 스톱워치를 활용하면 편리합니다.
