728x90
✍️ 학습 목표
Java가 제공하는 다양한 연산자를 알아보기.
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
- instanceof
- assignment(=) operator
- 화살표(->) 연산자
- 3항 연산자
- 연산자 우선순위
- switch 연산자
📌 산술 연산자
기본적인 수학 계산에 사용되는 연산자들을 말한다.
- 7가지 연산자가 존재한다. (+, -, *, /, %, ++, --)
- 나눗셈은 타입에 따라 다른 결과가 나온다. (int, float)
- 다른 타입끼리 산술 연산을 하면 더 큰 범위로 자동 형변환이 이루어진다.
- 문자도 산술 연산이 가능하다. 문자가 유니코드로 바꾸어 저장되기 때문이다.
// Examples
int x = 10;
int y = 4;
System.out.printf("%d / %d = %d%n", x, y, x / y); // 2
System.out.printf("%d / %f = %f%n", x, (float)y, x / (float)y); // 2.5f
System.out.println('b' - 'a'); // 1
✔️ 증감 연산자 (++, --)
- 1만큼만 증가 또는 감소시키는 연산자이다.
- 연산자 위치에 따라 결과가 바뀔 수 있다. 앞에 위치하면 계산 전에, 뒤에 위치하면 계산 후에 처리된다.
// Example
int a = 2;
int b = 2;
int resultA = ++a + 3;
int resultB = b++ + 3;
System.out.println("%d, %d", resultA, resultB) // 6, 5
📌 비트 연산자
비트 단위로 논리 연산을 할 때 사용하는 연산자로 6가지가 존재한다. (&, |, ^, ~, >>, <<)
피연산자로 정수만 가능하고 이진수로 표현했을 때 비트 단위로 처리한다.
- & (AND 연산자) : 모두 1일 때 1을 리턴한다.
- | (OR 연산자) : 하나라도 1이면 1을 리턴한다.
- ^ (XOR 연산자) : 1이 홀수라면 1을 리턴한다.
- ~ (비트 전환 연산자) : 0은 1을, 1은 0을 리턴한다. 2진수의 특성상 0과 1 밖에 없기 때문이다.
- <<, >> (비트 시프트 연산자) : 방향에 맞춰 비트를 이동시킨다. (
자세한 설명은 생략)
📌 관계 연산자
두 피연산자를 비교하는 데 사용되는 연산자이다.
- 굳이 나누자면 대소비교 연산자(>, <, >=, <=)와 등가비교 연산자(==, !=)로 나눌 수 있다.
- 반환 타입은 Boolean이다.
- 결국 이항 연산자이기에 타입이 다르면 형변환이 일어난다.
- 참조형은 등가비교 연산자만 사용할 수 있다. 객체의 주소 값을 비교해서 참 거짓을 따진다.
📌 논리 연산자
논리 값을 계산하는 연산자이다. 반환 타입은 Boolean이다.
- && (AND 연산자) : 모두 true일 때 true를 리턴한다.
- || (OR 연산자) : 하나라도 true라면 true를 리턴한다.
- ! (논리부정 연산자) : 결과를 반대로 리턴한다. (true → false, false → true)
✔️ 효율적인 연산 (short circuit evaluation)
- 논리 연산의 특징을 이용하면 효율적인 연산이 가능하다.
- AND 연산은 모두 true일 때 true이므로 맨 처음에 false가 나타나면 이후 값을 계산하지 않아도 된다.
- 마찬가지로 OR 연산은 하나라도 true라면 true이므로 맨 처음에 true가 나타나면 그 뒤는 보지 않는다.
📌 instanceof
참조 변수의 실제 타입을 확인하는 연산자이다.
- 반환 타입은 Boolean이다.
- 검사한 타입으로 형변환이 가능하다는 뜻이다.
// Example
class Parent {
...
}
class Child extends Parent {
...
}
Parent parent = new Child();
System.out.println(parent instanceof Child); // true
System.out.println(parent instanceof Parent); // true
System.out.println(parent instanceof Object); // true
📌 할당 연산자 (=assignment operator)
변수에 값 또는 수식의 연산 결과를 저장하는 연산자이다.
- '같다'의 연산자가 아닌 '할당'의 연산자이다.
- 연산자 기준 우측 피연산자의 값 또는 결과를 좌측 피연산자에 할당한다.
✔️ 복합 대입 연산자
- 반환 타입이 Boolean이 아닌 연산자와 할당 연산자와 결합한 연산자. 식을 줄여 쓸 수 있다.
// Example
int a = 10
int b = 2
a += b // a = a + b
a -= b // a = a - b
a *= b // a = a * b
a /= b // a = a / b
.
.
.
📌 화살표 연산자
메서드를 하나의 식으로 표현하게 해주는 즉, 람다식을 만드는 연산자이다.
- 람다식은 메서드의 이름과 리턴 값이 없어져 익명 함수라고도 부른다.
- 메서드 자체를 하나의 인수로 취급할 수 있어서 유연한 프로그래밍을 가능하게 한다.
// Example
// before
int methodName(int a, intb) {
로직...
}
// after
(int a, int b) -> {
로직...
}
- 반환값이 있다면 return문 대신 표현식으로 대신할 수 있다. 식의 연산결과가 반환값이고 문장이 아니라 식이라서 세미콜론을 붙이지 않는다.
- Java에서 모든 메서드는 클래스 내에 포함되야 하기 때문에 람다식은 익명 클래스의 객체와 동등하다.
📌 3항 연산자
조건식에 따라 다른 결과를 반환하는 연산자
- if문을 한 줄로 바꾼 것 같은 형태. 조건 ? 참 : 거짓
- 식에 또 다른 3항 연산자가 올 수도 있다.
int a = 5;
int b = 3;
String result = "";
result = a > b ? "참" : "거짓";
System.out.println(result) // 참
📌 연산자 우선순위
연산자가 여럿일 때 우선적으로 연산되어야 하는 순위를 의미한다.
- 괄호를 제외하고 산술 → 비교 → 논리 → 대입 순서이다.
- 항 기준으로 단항 → 이항 → 삼항 순서이다.
📌 switch 연산자
기존 switch 문에 expression이 추가되었다.
- 기존 콜론(:) 방식에서 화살표(->) 사용 가능하도록 확장되었다.
- 앞으로 break 대신 yield를 사용해야 한다.
// Example
static void howMany(int n) {
switch (n) {
case 1 -> System.out.println("one");
case 2 -> System.out.println("two");
default -> System.out.println("many");
}
}
howMany(1); // one
howMany(2); // two
howMany(3); // many
'언어 공부 > Java' 카테고리의 다른 글
[Java] Java의 상속 (2) | 2022.08.25 |
---|---|
[Java] Java의 클래스 (0) | 2022.08.17 |
[Java] Java 제어문 (0) | 2022.08.16 |
[Java] Java의 데이터 타입, 변수 그리고 배열 (0) | 2022.08.12 |
[Java] JVM과 자바 코드 실행 (0) | 2022.08.08 |
댓글