자바
자바의 연산자
lamarcK
2025. 4. 30. 16:13
1. 기본 개념
자바의 연산자는 값에 대한 연산을 수행하는 기호입니다. 요리에 비유하자면, 재료(피연산자)를 가지고 요리 방법(연산자)을 통해 새로운 음식(결과값)을 만드는 것과 같습니다.
2. 주요 연산자 종류
a ) 산술 연산자
+ (덧셈)
- (뺄셈)
* (곱셈)
/ (나눗셈)
% (나머지)
b ) 비교 연산자
== (같다)
!= (다르다)
> (크다)
< (작다)
>= (크거나 같다)
<= (작거나 같다)
c ) 논리 연산자
&& (AND)
|| (OR)
! (NOT)
3. 주의할 점
정수 나눗셈에서 주의할 점
int result = 5 / 2; // 결과는 2 (소수점 버려짐)
double result2 = 5 / 2; // 결과는 2.0 (이미 정수 나눗셈이 수행된 후)
double result3 = 5.0 / 2; // 결과는 2.5 (올바른 실수 나눗셈)
null 값 연산 주의
String str = null;
if (str.equals("test")) // NullPointerException 발생
if ("test".equals(str)) // 안전한 방법
4. 내부 작동 방식
- 연산자 우선순위가 있음 (곱셈/나눗셈이 덧셈/뺄셈보다 우선)
- 형변환(Type Casting)이 자동으로 일어날 수 있음
5. 실무 활용 예시
// 1. 가격 계산
int price = basePrice + (quantity * unitPrice);
// 2. 나이 확인
boolean isAdult = age >= 18;
// 3. 유효성 검사
boolean isValid = !name.isEmpty() && age > 0;
// 4. 할인율 계산
double discount = price * 0.1;
6. 자주하는 실수
== 와 equals() 혼동
```
String str1 = new String("hello");
String str2 = new String("hello");
```
str1 == str2 // false (참조 비교)
str1.equals(str2) // true (값 비교)
- if의 경우도 if(a==b) 식으로 표현함
- =는 대입 연산자이기 때문에 비교형에서 사용 불가(자바 스크립트와 다름)
## 7. 특별한 연산자
```java
// 삼항 연산자
int result = (condition) ? valueIfTrue : valueIfFalse;
// instanceof 연산자
if (obj instanceof String) {
String str = (String) obj;
}
8. 비트 연산자 (고급)
& (비트 AND)
| (비트 OR)
^ (비트 XOR)
~ (비트 NOT)
<< (왼쪽 시프트)
>> (오른쪽 시프트)
자바스크립트와의 주요 차이점:
- 자바는 정적 타입이므로 연산 시 타입 체크가 엄격함
- === 연산자가 없음 (자바스크립트의 특징)
- 자동 형변환 규칙이 더 엄격함
1. 기본 할당 및 비교 연산자
**자바스크립트
= : 할당
== : 값만 비교 (타입 변환 발생)
=== : 값과 타입 모두 비교
let x = 5; // 할당
console.log(5 == "5") // true
console.log(5 === "5") // false
**자바
= : 할당
== : 비교 (타입이 다르면 컴파일 에러)
=== : 존재하지 않음
int x = 5; // 할당
System.out.println(5 == 5); // true
// 5 == "5" // 컴파일 에러
2. 문자열 비교
**자바스크립트
let str1 = "hello";
let str2 = new String("hello");
str1 == str2 // true (값 비교)
str1 === str2 // false (타입까지 비교)
**자바
String str1 = "hello";
String str2 = new String("hello");
str1 == str2 // false (참조 비교)
str1.equals(str2) // true (값 비교)
3. 산술 연산자의 동작
**자바스크립트 - 자동 형변환
"5" + 3 // "53"
"5" - 3 // 2
"5" * "3" // 15
**자바 - 엄격한 타입 체크
"5" + 3 // "53"
// "5" - 3 // 컴파일 에러
// "5" * "3" // 컴파일 에러
4. null/undefined 처리
**자바스크립트
let value = null;
value == null // true
value == undefined // true
value === undefined // false
// Nullish 병합 연산자
let result = value ?? "default";
**자바
String value = null;
value == null // true
// null 안전 비교
Objects.equals(value, "test")
// 삼항 연산자로 null 처리
String result = value != null ? value : "default";
5. 논리 연산자
**자바스크립트
// 값 반환
let a = 0 && "hello" // 0
let b = "hello" || "" // "hello"
// 단축 평가
let name = user && user.name
**자바
// boolean 값만 반환
boolean a = false && true; // false
boolean b = true || false; // true
// null 체크
String name = user != null ? user.getName() : null;
6. 타입 체크
**자바스크립트
typeof "hello" // "string"
typeof 42 // "number"
typeof true // "boolean"
**자바
// instanceof 사용
object instanceof String
object instanceof Integer
7. 증감 연산자
**자바스크립트
let x = "5";
x++; // 6 (숫자로 변환)
**자바
String x = "5";
// x++; // 컴파일 에러
8. 실무에서의 주의사항
**자바스크립트
// 느슨한 타입 체크 주의
if (someValue == null) { // null과 undefined 모두 체크
// ...
}
// === 사용 권장
if (someValue === null) {
// ...
}
**자바
// null 체크
if (someValue == null) {
// ...
}
// 문자열 비교
if ("expectedValue".equals(someValue)) { // null 안전
// ...
}
9. 공통적인 실수 방지
**자바스크립트
// 할당과 비교 혼동
if (x = 5) { // 의도치 않은 할당
// ...
}
**자바
// 컴파일 에러로 방지됨
if (x = 5) { // 컴파일 에러
// ...
}
10. 실무 활용 팁
- 자바스크립트:
- === 연산자 사용 권장
- typeof 활용한 타입 체크
- Optional Chaining (?.) 활용
- 자바:
- equals() 메소드로 객체 비교
- instanceof로 타입 체크
- Optional 클래스 활용
이러한 차이점들은 각 언어의 설계 철학에서 비롯됩니다:
- 자바스크립트: 유연성과 편의성 중시
- 자바: 안정성과 예측 가능성 중시
실무에서는 각 언어의 특성을 이해하고 적절히 활용하는 것이 중요합니다.