김영한 자바 입문 연산자

김영한 자바 입문편 “연산자” 강의에서 중요하거나 새롭게 깨달은 것들만 간단하게 정리하자.

연산자

자주 사용하는 연산자

  • 산술 연산자: +, -, *, /, %
  • 증감 연산자: ++, --
  • 비교 연산자: ==, !=, >, <, >=, <=
  • 논리 연산자: &&, ||, !
  • 대입 연산자: =, -=, +=, /=, %=
  • 삼항 연산자: ? :
  • 객체 타입 확인 연산자: instanceof
  • 그 외 : new, [] (배열 인덱스), . (객체 멤버 접근), () (메소드 호출)

실무에서 거의 사용할 일이 없는 연산자

  • 비트 연산자: &, |, ^, ~, <<, >>, >>>


연산자 우선순위

연산자가 많은 수식에는 괄호를 명시적으로 사용하는 것이 더 명확하고 이해하기 쉽다.

1
2
3
2 * 2 + 3 * 3

(2 * 2) + (3 * 3)

위 두 개의 간단한 수식을 비교해볼 때 확실히 괄호가 포함된 것이 더 이해하기 쉽다.

코드를 몇자 줄여서 모호하거나 복잡해 지는 것 보다는 코드가 더 많더라도 명확하고 단순한 것이 더 유지보수 하기 좋다.

대부분의 개발자들은 연산자 우선순위를 외우지 않을 것이다.(나 또한.. 외우지 않는다.)

연산자 우선순위를 외우지 말고 아래 두 가지만 생각하자.

  1. 상식선에서 우선순위를 결정하자.
  2. 애매하면 괄호() 를 사용하자.

개발에서 가장 중요한 것은 단숨함과 명확함이다. 애매하거나 복잡하면 안된다.


문자열 비교

문자열이 같은지 비교할 때는 == 이 아니라 .equals() 메서드를 사용해야 한다. == 를 사용하면 성공할 때도 있지만 실패할 때도 있다.

1
2
3
4
5
6
7
8
9
10
11
String str1 = "hello";
String str2 = "hello";

System.out.println(str1 == str2) // true
System.out.println(str1.equals(str2)) // true

String str3 = new String("hello");
String str4 = new String("hello");

System.out.println(str3 == str4) // false
System.out.println(str3.equals(str4)) // true

문자열 리터럴 값 비교시에는 == 으로도 괜찮지만, 문자열 객체를 비교할 때는 예상치 못 한 결과가 나오게 된다. 각각 다른 객체를 가리키고 있기 때문이다.

equals()를 사용하면 문자열의 실제 내용을 비교하여 일치 여부를 확인할 수 있으므로, 예상치 못한 결과나 버그를 방지하고 정확한 비교를 할 수 있다.