반응형
연산에 사용되는 표시와 기호를 연산자.
연산되는 데이터를 피연산자라고한다.
사칙연산자
: 덧셈, 뺄셈, 곱셈, 나눗셈.
자바에서 사용하는 연산자 기호는 일반 수학에서 사용하는 표기와 다를 수 있습니다.
example) 곱하기 연산은 자바에서 *로 표기합니다.
- + 더하기
- - 빼기
- * 곱셈
- / 나누기
💡 코딩에서 %는 나머지를 뜻합니다.
대입연산자
: 변수에 값을 대입한다.
- +=
- -=
- *=
- /=
- %=
코딩에서 변수i에 값을 더할 때 이런 식으로 i + 10 이라고 적지 않습니다.
기능은 동일하지만 대입연산자를 사용하면 성능과 가독성이 올라가기 때문입니다.
나머지 % 란
10을 7로 나눈 나머지 3이 나옵니다.
부호연산자 +와 -
- 부호연산자를 변수 앞에 붙인다.
- +연산자는 변수 값의 부호를 유지한다.
- -연산자는 변수 값의 부호를 양수를 음수로, 음수는 양수로 바꿀 수 있다.
💡 부호연산자를 사용할 때, 주의할 점은 산출 타입이 int가 된다는 것이다.
만약 short res = -x; 과 같이 사용하면 예외가 발생한다.
증감연산자
++ 와 --
- ++ : 1을 증가 시킵니다.
- -- : 1을 감소시킵니다.
이렇게 변수 앞에 ++/--를 적는 것을 증감연산자 중 전위연산자입니다.
전위 연산자는 적는 동시에 값이 증감됩니다.
- 변수 뒤에 ++/--를 적는 것을 후위연산자라고 합니다.
- 후위연산자는 그 다음 코드에 증감된 게 반영됩니다.
복잡하게 생각할 필요 없이
++가 변수 뒤에 오면 뒤에 반영된다. 고 생각하면 됩니다.
비교연산자
: 값을 비교해 boolean을 반환한다.
- 1 > 0
- 1은 0보다 크다는 식입니다.
- 사실이니 true를 반환합니다.
- 1은 0보다 크다는 식입니다.
비교식 |
< |
<= |
> |
>= |
== |
!= |
- a >= b
: b는 a 보다 작거나 같다. - a == b
: a와 b는 같다. - a != b
: a와 b는 다르다.
💡 코딩에서 =는 값을 대입하는 거여서, 비교식을 쓸 때는 ==를 씁니다.
논리연산자
true 와 false
- !
- not
- 논리부정
- 논리식의 결과를 반대로 출력한다.
- not
not true → false
not false → true
와 같이 생각하면 된다. 표현만 !로 하는 것일 뿐.
- &
- and
- 논리곱
- 논리 & 논리에서 모두 참일 경우에만 참true.
- and
- |
- or
- 논리합
- 두 논리식 중 하나만 참이어도 참.
- or
마찬가지로 and를 &로 표현했구나 생각하면 쉽습니다.
true and true is true.
true or false is false.
어떻게 보면 =는 is이라고 볼 수 있겠죠.
- ^
- xor
- 배타적논리합
- 하는 true, 하나는 false여야만 결과가 참이다.
단축평가
Short-circuit Evaluation
&& 와 ||
- &와 &&나 양옆이 참이여야만 true가 반환된다는 것은 같습니다.
- 단축평가는 말 그대로 먼저 오는 왼쪽 논리식이 false이면,
뒤에 오는 오른쪽 논리식은 실행하지 않고 넘어가겠다는 겁니다.
- 단축평가는 말 그대로 먼저 오는 왼쪽 논리식이 false이면,
- ||
- 마찬가지로 한쪽만 참이면 true이기 때문에, 오른쪽 식이 참이면 뒤의 논리식은 실행하지 않습니다.
- 마찬가지로 한쪽만 참이면 true이기 때문에, 오른쪽 식이 참이면 뒤의 논리식은 실행하지 않습니다.
실제 프로젝트에서는 단축평가 &&와 ||를 많이 씁니다.
단축평가는 굳이 필요없는 식을 실행하지 않아 성능적으로 더 우수하기 때문입니다.
또한 &와 |는 비트연산에도 사용됩니다.
하지만 &와 &&의 차이는 확실히 알아두어야 합니다.
삼항연산자
조건 ? 참일 때 리턴 : 거짓일 경우 리턴
- 연산자 형태가 ? : 입니다. 처음에는 이게 헷갈릴 수 있습니다.
a ? b : c
a조건이 참이면 b를 반환, 거짓이면 c를 반환한다는 겁니다.
- if문 대신 많이 사용됩니다.
코드가 많이 짧아지기 때문에 생각보다 많이 사용되는 연산자입니다.
비트 연산자
- 정수를 비트로 계산하면 아래와 같습니다.
- 10 → 0000 0000 0000 0000 0000 0000 0000 1010
- 2 → 0000 0000 0000 0000 0000 0000 0000 0010
- 10 → 0000 0000 0000 0000 0000 0000 0000 1010
- &로 1010과 0010에서 같은 부분을 찾습니다. 그럼 비트 10밖에 남지 않습니다. 정수로는 2입니다.
- |로 1010과 0010에서 1이 든 부분을 모두 찾으면 1010입니다. 정수로는 10입니다.
- 그외에도 비트연산자로는 ^, ~, <<, >>가 있습니다.
연산자 우선순위
종류 | 분류 | 연산자 | 연산방향 |
단항 | 전위 | a++ a-- | ← |
후위 | ++a --a | ← | |
산술 | 곱셈 | * / % | → |
덧셈 | + - | → | |
시프트 | 시프트 | << >> | → |
관계 | 비교 | > < >= <= instanceOf | → |
동등 | == != | → | |
비트 | and | & | → |
xor | ^ | → | |
or | | | → | |
논리 | and | && | → |
or | || | → | |
삼항 | 삼항 | ? : | ← |
대입 | 대입 | = += -= *= /= %= ... | ← |
❗우선순위에 상관없이 내가 원하는 식을 먼저 실행하고 싶다면 ( ) 로 묶어주면 됩니다.
사담
코딩을 배울 때 노션에 적어뒀던 내용들을 오블완 챌린지를 하는 겸 티스토리로 가져오고 있습니다.
처음 배울 때 헷갈렸던 부분과 회사에서 제가 중요하다고 느낀 부분들을 같이 적고 있습니다.
회사에서 프로젝트를 하다보면 사용하는 코드만 반복하다보니 까먹은 내용도 있고(비트연산자라든 지..) 한눈에 이해하기 쉽게 글을 코드예제와 함께 적다보니 생각보다 쉽지 않은 것 같습니다.
그래도 제 글을 읽을 미래의 저와 다른 분들을 위해 좋은 포스팅을 쓰고자 합니다.
반응형
'☕ JAVA > ☕ Variables & Data Type' 카테고리의 다른 글
[JAVA]TreeSet (1) | 2024.11.25 |
---|---|
[JAVA]HashSet (0) | 2024.11.23 |
[JAVA]Iterator, ListIterator, Enumeration (0) | 2024.11.21 |
[JAVA]NaN과 Infinity (0) | 2024.11.21 |
[JAVA]LinkedList와 Queue (0) | 2024.11.19 |