연산자 ( Operator )
: 연산을 수행하는 기호
* 피연산자 : 연산자의 작업 대상
* 단항 연산자 : 피연산자를 하나만 받는 받는 연산자는 단항(Unary) 연산자라고 부릅니다. 피연산자의 부호를 뒤집는 단항 마이너스 연산자가 단항 연산자의 대표적인 예 입니다.
* 이항 연산자 : 두 개의 피연산자를 받는 연산자는 이항(Binary) 연산자라고 부릅니다.
산술 연산자
산술 연산자 (Arithmetic Operator) 는 정수, 부동소수점, 문자열 등 Boolean 타입을 제외한 모든 Primitive Type 에서 사용이 가능합니다.
피연산자들 중 부동소수점이 있다면 부동소수점 산술이 되고 그렇지 않다면 정수 산술이 됩니다. 정수 산술과 부동 소수점 산술이 나누기를 수행하는 방식과 언더플로우(Underflow)와 오버플로우(Overflow)가 처리되는 방식이 다르기 때문에 중요합니다.
더하기 ( + : Addition )
+ 는 기본적으로 두 수를 더하는 연산이지만 문자열을 연결시키는데도 사용할 수 있습니다. 만약 + 의 피연산자들 중 문자열이 있다면 다른 피연산자도 문자열로 변환됩니다.
빼기 ( - : Subtraction )
-(마이너스) 연산자는 첫번째 피연산자에서 두번째 피연산자를 빼는 연산자입니다. (Binary Operator) 하나의 피연산자로만 사용된다면 1차 연산( Unary negation ) 으로 사용될 수 있습니다. 다만 더하기 연산 처럼 문자열 연산은 불가합니다.
나누기 ( / : 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 |