본문 바로가기
언어 공부/Java

[Java] Java의 연산자

by 희조당 2022. 8. 15.
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

댓글