기본 이해
개념 정의
비교 연산자는 두 피연산자의 크기나 동등성을 비교하여 true/false의 논리값을 반환하는 연산자다.
일상생활 비유
- 체육대회에서 달리기 순위 비교
- 시험 점수 합격선 판단
- 쇼핑몰에서 상품 가격 비교
존재 이유와 목적
필요성
- 프로그램의 흐름 제어
- 데이터 검증
- 조건부 실행 결정
실제 역할
- 조건문의 기준 제공
- 데이터 필터링
- 정렬 알고리즘 구현
- 유효성 검사
해결하는 문제들
- 데이터 범위 검증
- 입력값 유효성 확인
- 비즈니스 로직 구현
핵심 구성요소
주요 연산자
== : 동등 비교
!= : 비동등 비교
< : 작음
> : 큼
<= : 작거나 같음
>= : 크거나 같음
작동 방식
int a = 5;
int b = 3;
boolean result1 = a > b;
boolean result2 = a < b;


연산자 우선순위
- 단항 연산자
- 산술 연산자
- 비교 연산자
- 논리 연산자
주의사항과 일반적 오류
일반적 실수
객체 비교 시 == 사용
// 잘못된 예
String str1 = new String("hello");
String str2 = new String("hello");
if (str1 == str2) // false
// 올바른 예
if (str1.equals(str2)) // true
자바에서 == 연산자는 기본 타입(primitive type)일 경우 값 자체를 비교하지만 참조 타입(reference type)의 경우 객체의 주소값을 비교하기 때문에 값이 동일해도 주소가 달라서 false가 나오게 된다.
String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2); // true

예외적으로 String 리터럴의 경우 String Pool에서 같은 값을 재사용하므로 == 로 비교해도 true가 나올 수 있다. 하지만 이는 특수한 경우이며, 객체의 내용을 비교할 때는 항상 equals() 메소드를 사용하는 것이 안전하다.
부동소수점 비교
// 잘못된 예
double a = 0.1 + 0.2;
double b = 0.3;
if (a == b) // false
// 올바른 예
if (Math.abs(a - b) < 0.000001) // true
2진법으로는 실수의 소수점을 완벽하게 표현할 수 없기 때문에 조금씩 오차가 발생한다.
비교 분석
| 비교방식 | 사용케이스 | 장점 | 단점 |
|---|---|---|---|
| == | 기본타입 비교 | 간단명료 | 참조타입에 부적합 |
| equals() | 객체 비교 | 정확한 비교 | null 체크 필요 |
| compareTo() | 순서 비교 | 정렬 가능 | 구현 필요 |
실무 활용
적용 사례
1. 사용자 인증
if (inputPassword.equals(storedPassword)) {
login();
}
2. 데이터 검증
if (age >= 18 && age <= 65) {
processApplication();
}
3. 정렬 알고리즘
if (list.get(i).compareTo(list.get(j)) > 0) {
Collections.swap(list, i, j);
}
베스트 프랙티스
- 객체 비교는 equals() 사용
- null 체크 선행
- 부동소수점 비교 시 오차 범위 설정
- 가독성 있는 비교문 작성
[관련 개념]
- 기본 데이터 타입
- 참조 데이터 타입
- 형변환
- 연산자 우선순위
[후속 개념]
- 논리 연산자
- 조건문(if, switch)
- Comparable 인터페이스
- Comparator 인터페이스
'Java > 자바 학습' 카테고리의 다른 글
| 자바의 논리 연산자 (1) | 2025.05.21 |
|---|---|
| 자바 산술 연산자와 오버 플로우/ 언더 플로우 (0) | 2025.05.19 |
| 자바의 부호/증감 연산자 (0) | 2025.05.19 |
| 자바 싱글톤 패턴 (Singleton Pattern) (0) | 2025.05.18 |
| Java의 this 키워드 (1) | 2025.05.18 |