연산자
목표
자바가 제공하는 다양한 연산자를 학습합니다.
연산자
주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 합니다.
연산자: 연산을 수행하는 기호를 말하며 (+,-,*,/ 등)
이 있습니다.
피연산자: 연산자의 작업 대상을 말하며 변수, 상수, 수식이 들어갈 수 있습니다.
산술 연산자
연산자: (+, -, *, /, %)
산술연산자 | 특징 |
---|---|
+ | 더하기 연산 |
- | 뺄셈 연산 |
* | 곱하기 연산 |
/ | 나누기 연산 |
% | 나머지 연산 |
예제 코드: 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에서 람다를 도입하면서 화살표 연산자가 나오게 되었습니다.
람다
람다는 간단히 말해 메소드를 하나의 식으로 표현한 것을 말합니다.
람다 표현식
람다 표현식은 단 하나의 객체만을 생성할 수 있는 클래스이기에 익명 클래스로 불리기도 합니다.
장점은 기존의 불필요한 코드를 줄여주고 작성된 코드의 가독성을 높여준다는 것입니다.
예제 코드: 람다 표현식
작성 방법
사용 방식은 (매개변수) -> {함수 몸체}
형태로 사용되며, 다음의 사항을 주의하여 사용합니다.
- 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있습니다.
예제 코드: 람다 표현식-타입추론이 가능한 경우 - 매개변수가 하나인 경우에는 (매개변수)에서 ()를 생략할 수 있습니다.
예제 코드: 람다 표현식-매개변수하나 - 함수의 몸체가 하나의 명령문으로 이루어져있을 경우엔 중괄호를 생략할 수 있습니다. (이때 세미콜론은 붙히지 않습니다.)
예제 코드: 람다 표현식-중괄호없음 - 함수의 몸체가 하나의 return문으로 이루어진 경우 중괄호를 생략할 순 없습니다.
예제 코드: 람다 표현식-return 필수 - 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문은 다음과 같은 문제가 있습니다.
- 불필요하게 장황합니다.
가독성이 떨어져 Error 발생시 디버깅이 어렵습니다.
예제 코드: Switch 코드가 장황함 - Break 설정을 놓칠 수 있습니다.
예제 코드: Switch break 놓침
자바12 Switch문
자바 12에서는 기본 Switch문의 단점을 다음과 같은 방법으로 해결했습니다.
- 람다(lamda)식을 활용해 간결하게 표현할 수 있습니다.
람다를 이용해 return을 구현할 수 있습니다.(return 받은 값은 변수에 입력 가능합니다.)
람다를 이용했을 땐 break를 하지 않아도 다음 case 구문으로 넘어가지 않습니다.
중괄호를 포함한 람다 표현식으로 전처리 작업을 구현할 수 있습니다.
default가 반드시 추가되어야 합니다.
예제 코드: Switch 람다식 사용
자바13 Switch문
- 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 |