본문 바로가기
JAVA

백기선 자바 스터디 3주차

by 소고기 굽는 개발자 2023. 7. 12.

연산자

목표

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

연산자

주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 합니다.

연산자: 연산을 수행하는 기호를 말하며 (+,-,*,/ 등)이 있습니다.
피연산자: 연산자의 작업 대상을 말하며 변수, 상수, 수식이 들어갈 수 있습니다.

산술 연산자

연산자: (+, -, *, /, %)

산술연산자 특징
+ 더하기 연산
- 뺄셈 연산
* 곱하기 연산
/ 나누기 연산
% 나머지 연산

예제 코드: calculate 코드

비트 연산자

비트 연산자는 데이터를 비트 단위로 연산합니다.
0과 1로 표현이 가능한 정수 타입만 비트 연산이 가능하며, 0은 거짓 그 외에 값은 참을 의미합니다.
대표적인 비트 연산자로는 ~(not), &(and), |(or), ^(xor)이 있습니다.

예제 코드: BitOperation 코드

관계 연산자

이항 연산자로 피연산자의 크리를 비교하는 연산자를 말합니다.
연산 결과는 true 혹은 false로 알려줍니다.

연산자 이름 설명
== 같음 양쪽이 같으면 참, 아니면 거짓
!= 다름 양쪽이 다르면 참, 같으면 거짓
> 보다큼 왼쪽이 크면 참, 아니면 거짓
>= 보다 크거나 같음 왼쪽이 크거나 같으면 참, 아니면 거짓
< 보다 작음 왼쪽이 작으면 참, 아니면 거짓
<= 보다 작거나 같음 왼쪽이 작거나 같으면 참, 아니면 거짓

논리 연산자

boolean타입의 논리값을 말합니다.
각 논리값들의 의미는 다음과 같습니다.
!: 기존 boolean값의 부정을 의미합니다.
&&: and를 의미합니다.
||: or을 의미합니다.

x y x||y x&&y
true true true true
true false true false
false true true false
false false false false

예제 코드: 논리 연산자

instanceof

레퍼런스 타입 변수가 레퍼런스 타입의 데이터 타입인지 확인하기 위해 사용하는 메서드입니다.
일반적으로는 레퍼런스 타입 변수가 레퍼런스 타입으로 변경이 가능한지 확인하기 위해서 사용됩니다.
결과로는 true, false를 반환합니다.
예제 코드: 자바 연산자 클래스

assignment(=) operator

대입 연산자 설명
= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입합니다.
+= 왼쪽의 피연산자에 오른쪽의 피연사자를 더한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
-= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
*= 왼쪽의 피연산자에서 오른쪽의 피연산자를 곱한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
/= 왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
%= 왼쪽의 피연산자에서 오른쪽의 피연산자를 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입합니다.
&= 왼쪽의 피연산자에서 오른쪽의 피연산자와 비트 AND 연산한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
` =`
^= 왼쪽의 피연산자에서 오른쪽의 피연산자와 비트 XOR 연산한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
<<= 왼쪽의 피연산자에서 오른쪽의 피연산자만큼 왼쪽 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
>>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽으로 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
>>>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽으로 시프트한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
얕은 복사

얕은 복사를 했을 경우 Stack 영역에선 2가지 주소로 표현되지만 실질적으로는 Heap영역에서 바라보는 값은 하나입니다. 그래서 두 객체 중 하나를 수정하더라도 수정이 동일하게 일어납니다.

깊은 복사

깊은 복사의 경우 Stack영역과 Heap영역의 값이 서로 매핑되는 영역이 달라집니다. 그래서 값을 변경했을 때도 각 객체들이 영향을 받지 않습니다.

예제 코드: 대입 연산자
출처
https://velog.io/@khsb2012/java-study-week3
https://kils-log-of-develop.tistory.com/336

화살표(->) 연산자

자바8에서 람다를 도입하면서 화살표 연산자가 나오게 되었습니다.

람다
람다는 간단히 말해 메소드를 하나의 식으로 표현한 것을 말합니다.


람다 표현식
람다 표현식은 단 하나의 객체만을 생성할 수 있는 클래스이기에 익명 클래스로 불리기도 합니다.
장점은 기존의 불필요한 코드를 줄여주고 작성된 코드의 가독성을 높여준다는 것입니다.
예제 코드: 람다 표현식


작성 방법
사용 방식은 (매개변수) -> {함수 몸체}형태로 사용되며, 다음의 사항을 주의하여 사용합니다.

  1. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있습니다.
    예제 코드: 람다 표현식-타입추론이 가능한 경우
  2. 매개변수가 하나인 경우에는 (매개변수)에서 ()를 생략할 수 있습니다.
    예제 코드: 람다 표현식-매개변수하나
  3. 함수의 몸체가 하나의 명령문으로 이루어져있을 경우엔 중괄호를 생략할 수 있습니다. (이때 세미콜론은 붙히지 않습니다.)
    예제 코드: 람다 표현식-중괄호없음
  4. 함수의 몸체가 하나의 return문으로 이루어진 경우 중괄호를 생략할 순 없습니다.
    예제 코드: 람다 표현식-return 필수
  5. return문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결과값이 됩니다.
    예제코드: 람다 표현식-return 대체

함수형 인터페이스

람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야 합니다. 여기서 참조변수의 타입을 함수형 인터페이스라고 부릅니다.


작성 방법
함수형 인터페이스는 추상 클래스와 달리 단 하나의 추상 메서드만을 가져야 합니다.
또한, @FunctionalInterface를 사용해 함수형 인터페이스임을 명시할 수 있습니다.
자바 컴파일러는 @FunctionalInterface에 두개 이상의 메서드가 선언되면 오류를 발생시킵니다.

위의 예제코드를 참고하면 함수형 인터페이스인 Function, Consumer 등의 사용을 확인할 수 있습니다.


출처
람다 표현식

3항 연산자

삼항 연산자는 자바에서 유일하게 피연산자를 세개나 가지는 조건 연산자입니다.


작성 방법
사용 방식은 조건식 ? 반환값1 : 반환값2형태로 사용합니다.
예제코드: 삼항 연산자 큰수


출처
기타 연산자


연산자 우선 순위

우선순위 연산자 결합방향
1 [ ]
()
.
2 ++
--
+(양수) -(음수)
~
!
(type)
new
3 * / %
4 +(더하기) -(빼기)
+(문자 결합 연산자)
5 <<
>>
>>>
6< <=
> >=
instanceof
7==
!=
8&
&
9^
^
10|
|
11&&
12||
13? :
14=
*= /= += -= %=
<<= >>= >>>=
&= ^= |=

출처: 자바 연산자 우선순위

(optional) Java 13. switch 연산자

기본 Switch문
기존의 switch문은 다음과 같은 문제가 있습니다.

  1. 불필요하게 장황합니다.
    가독성이 떨어져 Error 발생시 디버깅이 어렵습니다.
    예제 코드: Switch 코드가 장황함
  2. Break 설정을 놓칠 수 있습니다.
    예제 코드: Switch break 놓침

자바12 Switch문
자바 12에서는 기본 Switch문의 단점을 다음과 같은 방법으로 해결했습니다.

  1. 람다(lamda)식을 활용해 간결하게 표현할 수 있습니다.
    람다를 이용해 return을 구현할 수 있습니다.(return 받은 값은 변수에 입력 가능합니다.)
    람다를 이용했을 땐 break를 하지 않아도 다음 case 구문으로 넘어가지 않습니다.
    중괄호를 포함한 람다 표현식으로 전처리 작업을 구현할 수 있습니다.
    default가 반드시 추가되어야 합니다.
    예제 코드: Switch 람다식 사용

자바13 Switch문

  1. yield를 이용해 해당 데이터를 return 받을 수 있습니다.
    예제 코드: Switch yield

'JAVA' 카테고리의 다른 글

백기선 자바 스터디 8주차  (0) 2023.08.31
백기선 자바 스터디 6주차  (0) 2023.08.15
백기선 자바 스터디 4주차  (0) 2023.07.18
백기선 자바 스터디 2주차  (0) 2023.06.26
백기선 자바 스터디 1주차  (0) 2023.06.22