티스토리 뷰

Back-End/Java

3주차 과제 : 연산자

제이나린 2020. 12. 24. 10:00
728x90
반응형

2주차 과제

2020/12/23 - [Java] - 2주차 과제 : 자바 데이터 타입, 변수 그리고 배열에 대한 정리

에 이어 3주차 과제를 공부하려 한다.

 

 

 

3주차 과제

연산자


목표

자바가 제공하는 다양한 연산자를 학습하다.


학습할 것

1. 산술 연산자

우리가 일반적으로 말하는 사칙연산(+, -, *, /)과 나머지를 구하는 연산자(%)를 포함하여 총 5개가 있다.

연산식 설명
피연산자 + 피연산자 덧셈 연산
- 뺄셈 연산
* 곱셈 연산
/ 좌측 피연산자를 우측 피연산자로 나눗셈 연산
% 좌측 피연산자를 우측 피연산자로 나눈 나머지를 구하는 연산

공부한 코드 : ArithmeticOperatorExample.java

 


2. 비트 연산자

데이터를 비트(bit) 단위로 연산한다. 즉 0과 1이 피연산자가 된다.

1) 비트 논리 연산자(&, |, ^)

다음은 비트 논리 연산자의 종류와 기능을 설명한 표이다.

구분 연산식 결과 설명
AND
(논리곱)
1 & 1 1 두 비트 모두 1일 경우에만 연산 결과가 1
1 0 0
0 1 0
0 0 0
OR
(논리합)
1 ! 1 1 두 비트 중 하나만 1이면 연산 결과는 1
1 0 1
0 1 1
0 0 0
XOR
(배타적 논리합)
1 ^ 1 0 두 비트 중 하나는 1이고 다른 하나가 0일경우 연산결과는 1
1 0 1
0 1 1
0 0 0
NOT
(논리 부정)
  ~ 1 0 보수
  0 1

공부한 코드 : BitLogicExample.java

 

2) 비트 이동 연산자(<<, >>, >>>)

비트 이동(shift) 연산자는 정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행한다.

구분 연산식 설명
이동
(쉬프트)
a << b 정수 a의 각 비트를 b만큼 왼쪽으로 이동
(빈자리는 0으로 채워진다.)
a >> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동(빈자리는 정수 a의 최상위 부호 비트(MSB)와 같은 값으로 채워진다.)
a >>> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동
(빈자리는 0으로 채워진다.)

공부한 코드 : BitShiftExample.java

 


3. 관계 연산자

다른말로는 비교 연산자라고도 한다. 대소(<, <=, >, >=) 또는 동등(==, !=)을 비교해서 true 혹은 false값을 출력한다.

구분 연산식 설명
동등
비교
피연산자1 == 피연산자2 두 피연산자의 값은 같은지를 검사한다.
!= 두 피연산자의 값이 다른지를 검사한다.
크기
비교
> 피연산자1이 큰지를 검사한다.
>= 피연산자1이 크거나 같은지를 검사한다.
< 피연산자1이 작은지를 검사한다.
<= 피연산자1이 작거나 같은지를 검사한다.

공부한 코드 : CompareOperatorExample1.java

 


4. 논리 연산자

논리 연산자는 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행한다.

다음은 논리 연산자의 종류와 기능을 설명한 표이다.

구분 연산식 결과 설명
AND
(논리곱)
True &&
또는
&
True True 피연산자 모두가 True일 경우에만
연산 결과는 True이다.
True False False
False True False
False False False
OR
(논리합)
True ||
또는
|
True True 피연산자 중 하나만 True이면
연산 결과는 True이다.
True False True
False True True
False False False
XOR
(배타적논리합)
True ^ False False 피연산자가 하나는 True이고 다른 하나가 False일 경우에만 연산 결과는 True이다.
True True True
False False True
False True False
NOT
(논리부정)


! True False 피연산자의 논리값을 바꾼다.
False True

논리 연산자의 피연산자는 boolean 타입만 사용할 수 있다.

공부한 코드 : LogicalOperatorExample.java

 


5. instanceof

객체 타입 확인이란 어떤 객체가 어떤 클래스의 인스턴스인지를 확인할 때 사용한다.

boolean result = 좌항(객체) instanceof 우항(타입)

instanceof 연산자는 매개값의 타입을 조사할 때 주로 사용된다.

공부한 코드 : InstanceofExample.java

 


6. assignment(=) operator

할당 연산자 혹은 대입 연산자로고도 하며, 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장하는 것을 의미한다.

즉, 변수에 피연산자를 연삭식에 의해 대입 후 다시 변수에 저장하는 것을 말한다.

구분 연산식 설명
단순 대입 연산자 변수 = 피연산자 우측의 피연산자의 값을 변수에 저장한다.
복합 대입 연산자 변수 += 피연산자 변수 = 변수 + 피연산자
변수 += 피연산자
-= 변수 = 변수 - 피연산자
변수 -= 피연산자
*= 변수 = 변수 * 피연산자
변수 *= 피연산자
/= 변수 = 변수 / 피연산자
변수 /= 피연산자
%= 변수 = 변수 % 피연산자
변수 %= 피연산자
&= 변수 = 변수 & 피연산자
|= 변수 = 변수 | 피연산자
^= 변수 = 변수 ^ 피연산자
<<= 변수 = 변수 << 피연산자
>>= 변수 = 변수 >> 피연산자
>>>= 변수 = 변수 >>> 피연산자

공부한 코드 : AssignmentOperatorExample.java

 


7. 화살표(->) 연산자

화살표 연산자는 자바 8부터 람다식(Lambda Expressions)을 지원하면서 기존 코드가 달라졌다.

- 객체 지향 언어보다는 함수지향 언어이다.

- 자바 코드가 매우 간결해진다.

- 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

- 익명 구현 객체를 생성한다.

람다식 → 매개 변수를 가진 코드 블록 → 익명 구현 객체

 

익명 구현 객체를 생성하는 전형적인 코드는 다음과 같다.

Runnable runnable = new Runnable() {
	public void run() {...}
}

위의 코드를 람다식으로 표현하면 다음과 같다.

Runnable runnable = (타입 매개변수, ...) -> {실행문; ...};

매개변수의 이름은 개발자가 자유롭게 줄 수 있다.

 


8. 3항 연산자

세 개의 피 연산자를 필요로 하는 연산자를 말한다.

삼항 연산자 설명

공부한 코드 : ConditionalOperationExample.java

 


9. 연산자 우선순위

다음은 연산자의 연산 방향과 우선순위를 정리한 표이다.

연산자 연산방향 우선순위
증감(++, --), 부호(+, =)
비트(~), 논리(!)
산술(*, /, %)
산술(+, )
쉬프트(<<, >>, >>>)
비교(<, >, <=, >=, instanceof)
논리(&)
논리(^)
논리(|)
논리(&&)
논리(||)
조건(?:)
대입
(=, +=, -=, *=, /=, %=, &=, ^=, 
|=, <<=, >>=, >>>=)

표를 기반으로 우선순위를 정리하면 다음과 같다.

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

10. (optional)Java 13. switch 연산자.

switch문은 if문과 마찬가지인 조건 제어문이다.

공부한 코드 : SwitchExample.java

기존에는 case, break가 있었다면 Java 13에서부터는 yield라는 표현식이 추가되었다.

 


 

 

 

 

오늘은 연산에 대한 숫자놀이에 대해 많이 배운 것 같다.

게다가 새롭게도 switch연산이 업그레이드가 되었다는 것을 배웠다.

(아마 이 스터디를 하지 않았다면 모르고 살았을지도 모른다.)

 

 

 

참고서적

 

이것이 자바다
국내도서
저자 : 신용권
출판 : 한빛미디어 2015.01.05
상세보기
728x90
반응형
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함