Live-Study

3주차 : 연산자

WOOKTAE 2021. 3. 20. 12:26

연산자 ( Operator )

: 연산을 수행하는 기호 

 

* 피연산자 : 연산자의 작업 대상 

* 단항 연산자 : 피연산자를 하나만 받는 받는 연산자는 단항(Unary) 연산자라고 부릅니다. 피연산자의 부호를 뒤집는 단항 마이너스 연산자가 단항 연산자의 대표적인 예 입니다.

* 이항 연산자 : 두 개의 피연산자를 받는 연산자는 이항(Binary) 연산자라고 부릅니다. 


산술 연산자 

산술 연산자 (Arithmetic Operator) 는 정수, 부동소수점, 문자열 등 Boolean 타입을 제외한 모든 Primitive Type 에서 사용이 가능합니다. 

피연산자들 중 부동소수점이 있다면 부동소수점 산술이 되고 그렇지 않다면 정수 산술이 됩니다. 정수 산술과 부동 소수점 산술이 나누기를 수행하는 방식과 언더플로우(Underflow)와 오버플로우(Overflow)가 처리되는 방식이 다르기 때문에 중요합니다.

 


더하기 ( + : Addition )

+ 는 기본적으로 두 수를 더하는 연산이지만 문자열을 연결시키는데도 사용할 수 있습니다. 만약 + 의 피연산자들 중 문자열이 있다면 다른 피연산자도 문자열로 변환됩니다.

 


빼기 ( - : Subtraction )

-(마이너스) 연산자는 첫번째 피연산자에서 두번째 피연산자를 빼는 연산자입니다. (Binary Operator) 하나의 피연산자로만 사용된다면 1차 연산( Unary negation ) 으로 사용될 수 있습니다. 다만 더하기 연산 처럼 문자열 연산은 불가합니다.

 

 

String 에서 Int 형을 빼려고하니 발생한 컴파일 오류 !

 


나누기 ( / : Division )

/  연산자는 첫번째 피연산자를 두번째 피연산자로 나눕니다.

두 피연산자가 모두 정수라면 결과도 정수이며 나머지는 내림으로 사라진다. 

 


나머지 연산자 ( % : Modulo )

% 연산자는 첫번째 피연산자를 두번째 피연산자로 나누고 남은 나머지를 정수로 리턴한다.

리턴된 결과는 첫번째 피연산자의 부호와 동일합니다.

 

 


비트 연산자 

비트 연산자(Bitwise Operators) 및 시프트 연산자(Shift Operators)는 개별 비트를 조작하는 저수준(Low-Level) 연산자입니다.

비트 연산을 이해하기 위해서는 이진수와 음의 정수를 나타내는 데 사용되는 2의 보수를 이해해야 합니다.

부동소수점, 부울(Bool), 배열, 객체 등을 피연산자로 사용할 수 없습니다.

비트 연산자를 공부할 때는 디버거를 활용하여 바이너리(Binary)값을 보면 이해가 빨라집니다.


비트 보수 ( Bitwise complement : ~ )

~ 연산자는 비트 반전 또는 비트 NOT 연산자라고 합니다.

각 비트를 반전시켜 1 -> 0, 0 -> 1 로 변환합니다.

 

 


AND ( & )

& 연산자는 두 정수 피연산자를 AND 연산합니다. (비트곱) 

피연산자 중 양쪽이 모두 1이어야만 1을 반환

비트곱은 두 피연산자의 해당 비트가 모두 1일때만 1, 아니면 0을 리턴한다. 


OR ( | )

| 연산자는 두 정수 피연산자를 OR 연산합니다. (비트합)

피연산자 중 한 쪽값이 1이면, 1을 반환

 

 

 

AND 연산 예제와 다르게 비트를 합한 결과가 나오게 됩니다.


XOR (^)

이항 연산자로 피연산자의 값이 서로 다를 때만 1을 반환한다. 양쪽이 같으면 0을 반환.


쉬프트 연산자 ( << ,  >> ) 

쉬프트 연산자는 피연산자의 각 자리 (2진수로 표현했을때)를 '오른쪽 ( >> )' 또는 '왼쪽 ( << ) ' 으로 이동 (Shift ) 한다고 해서 '쉬프트 연산자' 이다. 

>> : Right Shift , << : Left Shift 

 

 

 


관계 연산자  ( 비교 연산자)

두 피연산자를 비교하는데 사용되는 연산자. 

주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 True, False 둘 중 하나이다.

 

* 비교하는 피연사의 타입이 서로 다를 경우에는 자료형의 범위가 큰 쪽으로 자동형 변환하여 피연산자의 타입을 일치 시킨후에 비교한다.

* 기본형 중 boolean 형을 제외한 나먼지 자료형에 사용할 수 있지만 참조형에는 사용할 수 없다.

 

비교연산자 연산결과
> 좌변 값이 크면 True, 아니면 False
< 좌변 값이 작으면 True , 아니면 False
>= 좌변 값이 크거나 같으면 True, 아니면 False
<= 좌변 값이 작거나 같으면 True, 아니면 False

등가비교연산자

두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자 

 

  • 모든 자료형에 사용할 수 있다.
  • 기본형의 경우 변수에 저장되어 있는 값이 같은지 알 수 있다.
  • 참조형의 경우 객체의 주소값을 저장하기 때문에 두개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지를 알수있다.
  • 참조형과 기본형은 서로 형변환이 불가하기 때문에 비교할 수 없다.

* 문자열의 비교

두 문자열을 비교할 때는 비교연산자 '==' 보다는 equals()라는 메서드 사용.

연산자 연산결과
== 두 값이 같으면 True, 다르면 False
!= 두 값이 다르면 True, 같으면 False

 


논리연산자 ( || , && )

이항 연산자. 

|| ( Logical AND ) , && ( Logical OR)

 

연산자

연산결과

|| ( OR 결합 )

피연산자 중 어느 한쪽만 True 이면, True를 결과로 얻는다.

&& ( AND 결합 )

피연산자 양쪽 모두 True여야 True 를 결과로 얻는다.

 

* 효율적인 연산

  •  OR 연산의 경우, 두 피연산자 중 어느 한쪽만 '참' 이어도 전체 연산 결과가 참이므로 좌측 피연산자가 '참' 이면 우측 피연산자의 값은 평가하지 않는다.
  • X || Y 에서 X 가 참이고 Y 가 거짓이여도 해당 연산의 결과는 언제나  True 이다.
  • AND 연산의 경우, 어느 한쪽만 '거짓' 이어도 전체 결과가 거짓이므로 좌측 피연산자가 거짓이면, 우측 피연산자의 값은 평가하지 않는다.
  • OR 연산의 경우 참일 확률이 높은 피연산자를 왼쪽에 놓고, AND 연산의 경우 거짓일 확률이 높은 피연산자를 왼쪽에 놓는 것이 더 빠른 연산 결과를 얻을 수 있다. ( => 같은 조건식이라도 피연산자의 위치에 따라서 연산 속도가 달라질 수 있다. )

instanceof

Type Introspection : 실행 시간에 객체의 타입이나 속성을 검사하는 프로그램의 능력을 뜻함

  • Java 에서 대표적인 Type Introspection
  • 객체의 타입을 비교할 때 사용

 


3항 연산자

Conditional Expression ? Expression ( True인 경우 ) : Expresssion ( False 인 경우 ) ;

조건식 ? 식1 : 식2   ( 조건식이 true 인 경우 식1 을 false 인경우 식2를 반환)

 

 

 


연산자 우선순위

 

  • 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
  • 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
  • 단항과 대입 연산자를 제외한 모든 연산방향은 왼쪽에서 오른쪽이다.
  • 복잡한 연산식에는 () 괄화를 사용해서 우선순위를 정해준다.

'Live-Study' 카테고리의 다른 글

6 주차 - 패키지  (0) 2021.06.21
4 주차 - 클래스 ( Class )  (0) 2021.04.27
2주차 : Java 데이터 타입, 변수 그리고 배열  (0) 2021.03.07
1주차 : JDK 와 JRE 차이  (0) 2021.02.28
1주차 : JVM 구성 요소  (0) 2021.02.28