Post

[Java Live Study] 3. 연산자(Operator)

백기선 강사님의 live study에 나온 주제들을 혼자 공부하고 정리하여 작성한 글입니다.⚓

📌 3주차 목표: Java의 다양한 연산자 학습하기

소스코드

[0] 용어

  • 연산자: 특정한 연산을 수행하고 결과를 반환하는 기호이다.
  • 피연산자: 연산의 대상
  • 단항연산자: 피연산자 1개를 필요로 하는 연산자
  • 이상연산자: 피연산자 2개를 필요로 하는 연산자
  • 삼항연산자: 피연산자 3개를 필요로 하는 연산자

[1] 산술 연산자(Arithmetic Operator)

연산자의미
+더하기(Addition) 혹은 문자열 String concat
-빼기(Subtraction)
*곱하기(Multiplication)
/나누기(Division)
%나머지(Remainder)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class ArithmeticOperator {
    private int i1 = 10;
    private int i2 = 50;
    private int i3 = 100;

    @Test
    public void numericAdditionOperator() {
        Assertions.assertEquals(60, i1 + i2);
    }

    @Test
    public void stringAdditionOperator() {
        Assertions.assertEquals("HelloWorld", "Hello" + "World");
        Assertions.assertEquals("HelloWorld1050", "Hello" + "World" + i1 + i2); // HelloWorld60이 아님에 주의!
    }

    @Test
    public void subtractionOperator() {
        Assertions.assertEquals(40, i2 - i1);
        Assertions.assertEquals(-50, i2 - i3);
    }

    @Test
    public void multiplyOperator() {
        Assertions.assertEquals(500, i1 * i2);
    }

    @Test
    public void divisionOperator() {
        Assertions.assertEquals(5, i2 / i1);
        Assertions.assertEquals(14, 100 / 7);
    }

    @Test
    public void remainderOperator() {
        Assertions.assertEquals(0, i2 % i1);
        Assertions.assertEquals(2, 100 % 7);
    }
}

[2] 비트 연산자(Bitwise Operator)

연산자의미
&AND
|(Inclusive) OR
^Exclusive OR
xyx&yx|yx^y
00000
01011
10011
11010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class BitwiseOperator {
    private int i1 = 14; // 1110(2)
    private int i2 = 3; // 0011(2)

    @Test
    public void andOperator() {
        Assertions.assertEquals(2, i1 & i2); // 8 = 0010(2)
    }

    @Test
    public void inclusiveOrOperator() {
        Assertions.assertEquals(15, i1 | i2); // 13 = 1111(2)
    }

    @Test
    public void exclusiveOrOperator() {
        Assertions.assertEquals(13, i1 ^ i2); // 5 = 1101(2)
    }
    
}

쉬프트 연산자(Bit Shift Operator)

🚧Unsigned Shift Operator🚧

[3] 관계 연산자(Relational Operator)

연산자역할
x == yx와 y가 같다
x != yx와 y가 같지 않다
x > yx가 y보다 크다
x >= yx가 y보다 크거나 같다
x < yx가 y보다 작다
x <= yx가 y보다 작거나 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
public class RelationalOperator {
    int i1 = 1;
    int i2 = 10;

    @Test
    public void relationalOperator() {
        Assertions.assertFalse(i1 == i2);
        Assertions.assertTrue(i1 != i2);
        Assertions.assertFalse(i1 > i2 | i1 >= i2);
        Assertions.assertTrue(i1 < i2);
        Assertions.assertTrue(i1 <= i2);
    }
}

[4] 논리 연산자(Logical Operator)

  • Conditional Operator이라고도 한다.
연산자의미
&&AND
||OR

비트 연산자의 AND(&) 혹은 OR(|)와 혼동하지 않도록 주의해야한다.

[5] instanceof

  • 타입 비교 연산자(Type Comparison Operator)로 객체가 특정 타입인지 확인할 수 있다..
  • true 혹은 false를 반환한다.
1
object_reference instanceof type
1
2
3
4
5
6
7
8
9
10
11
12
13
public abstract class Creature { ... }
public abstract class Plant extends { ... }
public class Cactus extends Plant { ... }

public class TypeComparisonOperator {
    @Test
    public void typeComparisonOperator() {
        Cactus c = new Cactus(12, true);
        Assertions.assertTrue(c instanceof Cactus);
        Assertions.assertTrue(c instanceof Plant);
        Assertions.assertTrue(c instanceof Creature);
    }
}

[6] 대입 연산자(Assignment Operator)

  • 대입 연산자 =는 피연산자에 값을 대입할 때 사용한다.
  • 다른 연산자와 결합하여 사용할 수도 있다.
1
variable = value

🔽 다른 연산자와 결합된 형태

연산자의미
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y
x &= yx = x & y
x ^= yx = x ^ y
x |= yx = x | y
x <<= yx = x « y
x >>= yx = x » y
x >>>= yx = x »> y

[7] 화살표 연산자(Arrow Operator)

  • 화살표 연산자 ->는 Java 8에서 람다 표현식이 도입되면서부터 사용되기 시작했다.
1
2
3
parameter -> expression                    // valid
(parameter1, parameter2) -> expression     // valid
(parameter1), parameter2) -> {code block}  // valid
1
2
3
4
5
6
7
8
9
10
List<Integer> numList = new ArrayList<>();
numList.add(1);
numList.add(2);
numList.add(3);
numList.forEach((n) -> System.out.println(n));

---------- 실행 결과 ----------
1
2
3

[8] 삼항 연산자(Ternary Operator)

  • 삼항 연산자 ? :는 경우에 따라 if문을 대신하여 간략하게 사용할 수 있다.
1
conditional ? true_expression : false_expression 
1
2
3
4
5
6
7
8
9
10
11
12
int score = 20;
Boolean passed = score >= 60 ? true : false;
System.out.println(passed);

// if문으로 표현하면
int score = 20;
Boolean passed;
if (score >= 60) {
    passed = true;
} else {
    passed = false;
}

[9] 연산자 우선순위

우선순위연산자 종류예시
1후위 연산자v++, v--
2단항 연산자++v, --v, +v, -v, ~, !
3산술 연산자(곱셈관련)*, /, %
4산술 연산자(덧셈관련)+, -
5관계 연산자(부등호)<, >, <=, >=, instanceof
6관계 연산자(등호)==, !=
7비트 연산자(AND)&
8비트 연산자(XOR)^
9비트 연산자(OR)|
10논리 연산자(AND)&&
11논리 연산자(OR)||
12삼항 연산자? :
13대입 연산자=, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=

[10] Switch 연산자

  • Switch 연산자는 기존에 존재하던 switch 조건문과 문법이 유사하며, Java 12부터 사용이 가능하다.
  • : 대신 ->를 사용할 수 있다. (statement가 여러개면 {}와 같이 사용한다.)
  • break가 필요 없다.
  • yield를 사용해 값을 대입한다.

🔽 switch 조건문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int option = 1;
String language;
switch(option) {
    case 1:
        language = "KO";
        break;
    case 2:
        language = "EN";
        break;
    case 3:
        language = "DE";
        break;
    default:
        language = "N/A";
        break;
}

🔽 switch 연산자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int option = 1;
String language = switch(option) {
    case 1:
        yield "KO";
    case 2:
        yield "EN";
    case 3:
        yield "DE";
}

// 혹은 이렇게도 표현 가능
String language = switch(option) {
    case 1 -> { yield "KO"; }
    case 2 -> { yield "EN"; }
    case 3 -> { yield "DE"; }
}

참고

This post is licensed under CC BY 4.0 by the author.