솜이의 데브로그

Chapter 03 ) 연산자 operator 본문

책을 읽자/Java의 정석

Chapter 03 ) 연산자 operator

somsoming 2021. 9. 3. 13:40

참고 : Java의 정석

 

1. 연산자

  • 연산자 (operator) : 연산을 수행하는 기호 (+, -, *, / 등)
  • 피연산자 (operand) : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)

 

연산자의 종류

산술 연산자 + - * / % << >> 사칙 연산과 나머지 연산(%)
비교 연산자 >  <  >=  <=  ==  != 크고 작음과 같고 다름을 비교
논리 연산자 &&  ||  !  &  |  ^  ~ '그리고(AND)'와 '또는(OR)'으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type)  ?:  instanceof 형변환 연산자, 삼항 연산자, instanceof 연산자

 

연산자의 우선순위는 다음과 같다.

  1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
  2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

(교재에 표 참고). 논리 연산자에서는 & , ^, |, &&, || 순으로 우선순위가 높다. 헷갈릴 땐 괄호로 표기하자.

 

 

증감연산자

  • 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.
  • 감소 연산자(--) : 피연산자의 값을 1 감소시킨다.

이 때 값이 참조되기 전에 증가시키면 전위형, 참조 후 증가시키면 후위형이라한다. (감소의 경우도 동일)

식에 두번 이상 포함된 변수에 증감 연산자를 사용하는 것은 피해야한다.

 

 

산술연산자

  - 수행 할 때 형변환에 주의하자!

 

헷갈렸던 부분

 

char c1 = 'a'

char c2 = c1 + 1;   //컴파일 에러
char c3 = 'a' + 1;   //컴파일 에러 없음

'a'+1 의 경우 리터럴 간의 연산이라 컴파일 시 컴파일러가 계산하지만, 수식에 변수가 들어가 있는 경우 컴파일러가 미리 계산 할 수 없기 때문에 형변환을 해주어야한다!

 

 

등가 비교연산자 ==  와 .equals 의 차이 꼭 기억하기

 

== 의 경우 두 피연산자의 값이 같은지 비교한다.

비교 연산자도 이항연산자이므로 연산을 수행하기 전에 형변환을 통해 두 피연산자의 타입을 같게 맞춘 다음 피연산자를 비교한다.

 

 

문자열의 비교

두 문자열을 비교할 때는 '==' 대신 equals()라는 메서드를 사용한다.

비교 연산자는 두 문자열이 완전히 같은 것인지를 비교하고, equals()는 문자열의 내용이 같은지를 비교한다.

 

String str1 = "abc";
String str2 = new String("abc");


str2=="abc" ? false
str2.equals("abc") ? true

즉, '==' 로 비교하면 내용이 같아도 다른 객체일 경우 false를 반환한다!

 

 

논리 연산자

  • ||  (OR 결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
  • && (AND 결합) : 피연산자 양쪽 모두 true 이어야 true를 결과로 얻는다.

 

Tip : OR 연산의 경우, 좌측 피연산자가 참이면 우측 피연산자의 값은 평가하지 않는다. AND 연산의 경우 좌측이 거짓이면 우측 피연산자는 평가하지 않는다. 따라서 같은 조건식이라도 피연산자의 위치에 따라서 연산 속도가 달라질 수 있다.

 

 

비트 연산자

  • | (OR 연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다. 주로 특정 비트의 값을 변경할 때 사용한다.
  • & (AND 연산자) : 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다. 주로 특정 비트의 값을 뽑아낼 때 사용한다.
  • ^ (XOR 연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다. 간단한 암호화에 사용된다.

~ : 비트 전환 연산자. 논리 부정 연산자 !와 유사하다.

 

 

쉬프트 연산자

  • x << n 은 x * 2^n 의 결과와 같다.
  • x << n 은 x / 2^n 의 결과와 같다.

빠른 실행속도를 요구하는 곳에만 쉬프트 연산자를 사용하는 것이 좋다. (가독성을 위해)

 

 

조건 연산자 ?:

 

조건식 ? 식1 : 식2

ex)

result = (x>y)? x:y

 

위의 식에서 x>y의 결과가 true 이면, result에는 x 의 값이 저장되고 false이면 y 값이 저장된다.

역시 가독성이 떨어지므로 한번 정도만 중첩하여 사용하는 것이 좋다.

 

 

복합 대입 연산자 (op)

 

주의 할 점 :  i *= 10 + j; 의 경우

i = i* (10+j); 와 같다.

'책을 읽자 > Java의 정석' 카테고리의 다른 글

Chapter 06 ) 객체지향프로그래밍(1)  (0) 2021.09.04
Chapter 05 ) 배열 array  (0) 2021.09.03
Chapter 04 ) 조건문과 반복문  (0) 2021.09.03
Chapter 02 ) 변수  (0) 2021.09.02
Chapter 01 ) 자바를 시작하기 전에  (0) 2021.09.02