자바

자바의 연산자

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. 자바는 정적 타입이므로 연산 시 타입 체크가 엄격함
  2. === 연산자가 없음 (자바스크립트의 특징)
  3. 자동 형변환 규칙이 더 엄격함

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 클래스 활용

이러한 차이점들은 각 언어의 설계 철학에서 비롯됩니다:

  • 자바스크립트: 유연성과 편의성 중시
  • 자바: 안정성과 예측 가능성 중시

실무에서는 각 언어의 특성을 이해하고 적절히 활용하는 것이 중요합니다.