[์ž๋ฐ” ์Šคํ„ฐ๋””] 3์ฃผ์ฐจ ์ •๋ฆฌ

January 19, 2023์— ์ž‘์„ฑ
study halle image

๋ชฉํ‘œ

์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ํ•™์Šต.

ํ•™์Šตํ•  ๊ฒƒ

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž
  • ๋น„ํŠธ ์—ฐ์‚ฐ์ž
  • ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž
  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
  • instanceof
  • assignment(=) operator
  • ํ™”์‚ดํ‘œ(->) ์—ฐ์‚ฐ์ž
  • 3ํ•ญ ์—ฐ์‚ฐ์ž
  • ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„
  • (optional) Java 13. switch ์—ฐ์‚ฐ์ž

+) ์ž๋ฐ”์˜ ์—ฐ์‚ฐ์ž ํ‰๊ฐ€ ์ˆœ์„œ

int a = 2;
int v = ++a + ++a * ++a;

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ•ญ์ƒ ์—ฐ์‚ฐ์ž๋ฅผ ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ์—์„œ * ๊ณฑ์…ˆ์ด + ๋ง์…ˆ๋ณด๋‹ค ๋จผ์ € ์ˆ˜ํ–‰๋ ์ง€๋ผ๋„, + ์—ฐ์‚ฐ์ž๋Š” ๋จผ์ € ํ‰๊ฐ€๋˜์–ด v๋Š” 3 + 4 * 5 ์ธ 23 ์ด ๋œ๋‹ค.

์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

  • ๋ง์…ˆ +
    • String concatenation operator ๋กœ๋„ ๋™์ž‘ํ•œ๋‹ค.
    • Java๋Š” ๋ชจ๋“  primitive type์— ๋Œ€ํ•ด string ๋ณ€ํ™˜์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— โ€œHelloโ€ + 123 : โ€œHello 123โ€ ์ด ๋œ๋‹ค.
    • toString() ์„ ์ •์˜ํ•œ ํด๋ž˜์Šค๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  • ๋นผ๊ธฐ -
  • ๊ณฑ์…ˆ *
  • ๋‚˜๋ˆ—์…ˆ /
  • modulo %
    • floating-point์—๋„ ๋™์ž‘ํ•œ๋‹ค. ex) 4.3 % 2.1์€ 0.1

๋น„๊ต ์—ฐ์‚ฐ์ž

  • == , !=
    • NaN ์€ ์–ด๋–ค ๊ฐ’๊ณผ๋„ ๊ฐ™์ง€ ์•Š์Œ.
    • positive zero์™€ negative zero๋Š” ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์นœ๋‹ค.
  • < > <= >=

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

  • && and
  • || or
  • ! not
  • & and (๋น„ํŠธ ์—ฐ์‚ฐ์—๋„ ์‚ฌ์šฉ. && ์™€๋Š” ๋‹ฌ๋ฆฌ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ์ „๋ถ€ ํ™•์ธํ•œ๋‹ค)
  • | or (๋น„ํŠธ ์—ฐ์‚ฐ์—๋„ ์‚ฌ์šฉ. || ์™€๋Š” ๋‹ฌ๋ฆฌ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ์ „๋ถ€ ํ™•์ธํ•œ๋‹ค)
  • ^ xor (๋น„ํŠธ ์—ฐ์‚ฐ์—๋„ ์‚ฌ์šฉ)

๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • ~ not
  • & and
  • | or
  • ^ xor
  • << left shift
  • >> right shift
  • >>> unsigned right shift
    • >> ๋Š” MSB ๋ถ€ํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์˜ฎ๊ธฐ๋Š” ๋ฐ˜๋ฉด, >>> ๋Š” ํ•ญ์ƒ 0์œผ๋กœ ์ฑ„์šด๋‹ค.

instanceof

ํƒ€์ž…์„ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž.

// True: ๋ชจ๋“  ๋ฌธ์ž์—ด์€ String ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.
"string" instanceof String
// True: ๋ชจ๋“  ๋ฌธ์ž์—ด์€ Object ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.
"" instanceof Object
// False: null์€ ์–ด๋–ค ๊ฒƒ์˜ ์ธ์Šคํ„ด์Šค๋„ ์•„๋‹ˆ๋‹ค.
null instanceof String

Object o = new int[] {1,2,3};
o instanceof int[]   // True
o instanceof byte[]  // False : byte ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค.
o instanceof Object  // True: ๋ชจ๋“  ๋ฐฐ์—ด์€ Object์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

// ์•ˆ์ „ํ•œ ํƒ€์ž… ์บ์ŠคํŒ…์„ ์œ„ํ•ด์„œ๋Š” instanceof๋กœ ํ™•์ธํ•˜์ž.
if (object instanceof Point) {
   Point p = (Point) object;
}

assignment(=) operator

  • ๊ฐ’์„ ์ €์žฅ(=ํ• ๋‹น)ํ•  ๋•Œ ์“ด๋‹ค.
  • ์˜ค๋ฅธ์ชฝ โ†’ ์™ผ์ชฝ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค a=b=c โ†โ†’ a=(b=c)

ํ™”์‚ดํ‘œ(->) ์—ฐ์‚ฐ์ž

Lambda์‹์˜ ํ‘œํ˜„์„ ์œ„ํ•œ ์—ฐ์‚ฐ์ž.

3ํ•ญ ์—ฐ์‚ฐ์ž

if else ๋ฌธ์„ ํ•œ ์ค„์˜ ํ‘œํ˜„์‹์œผ๋กœ ๋งŒ๋“ ๊ฒƒ โ†’ <condition> ? <if true> : <if false>

์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„

OperatorsPrecedence
postfix increment and decrement++ --
prefix increment and decrement, and unary++ -- + - ~ !
multiplicative* / %
additive+ -
shift<< >> >>>
relational< > <= >= instanceof
equality== !=
bitwise AND&
bitwise exclusive OR^
bitwise inclusive OR|
logical AND&&
logical OR||
ternary? :
assignment= += -= *= /= %= &= ^= |= <<= >>= >>>=

Java 13. switch ์—ฐ์‚ฐ์ž

์ฐธ๊ณ  - https://openjdk.org/jeps/354

  • switch ๊ตฌ๋ฌธ์„ ํ‘œํ˜„์‹์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค (๊ฐ’ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ)
  • case L: ํ˜•ํƒœ์˜ ๊ตฌ๋ฌธ์„ case L -> ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
// ๊ธฐ์กด switch ๊ตฌ๋ฌธ(๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ํ˜•ํƒœ๊ฐ€ ๋น„์Šท). ์ฝ”๋“œ๊ฐ€ ์žฅํ™ฉํ•ด์ง€๊ธฐ ์‰ฝ๋‹ค.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

// ๋ฐ”๋€ `->` ๊ตฌ๋ฌธ. case ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์˜ scope๋ฅผ case ์•ˆ์œผ๋กœ ์ œํ•œํ•œ๋‹ค.
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

// ์—ฌ๋Ÿฌ ์ค„๋กœ ์“ฐ๋ ค๋ฉด `yield`ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
int result = switch (s) {
    case "Foo":
        yield 1;
    case "Bar":
        yield 2;
    default:
        System.out.println("Neither Foo nor Bar, hmmm...");
        yield 0;
};

// ํ‘œํ˜„์‹
int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

์ฐธ๊ณ