๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[JAVA] ์ž๋ฐ” ์ž…๋ฌธ

by ๋Œ€๋ณต2 2024. 7. 10.

์„œ๋ก 

1๋…„ ๊ฐ€๊นŒ์ด ๊ฐœ๋ฐœ์ž๋ฅผ ํ•˜๊ฒ ๋‹ค๊ณ  ์—ด์‹ฌํžˆ Java๋ถ€ํ„ฐ Springboot, DB, ์ธํ”„๋ผ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํˆด๊ณผ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์˜ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๊ณ„์† ์ˆ˜๋ฐ• ๊ฒ‰ ํ•ฅ๊ธฐ ์‹์œผ๋กœ ๋ฐฐ์šฐ๋‹ˆ ๋ญ”๊ฐ€ ๋จธ๋ฆฌ์— ๋‚จ๋Š”๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žŠ๊ธฐ ์‰ฌ์šด ๋‚ด์šฉ์ด๋‚˜ ์ž˜ ๋ชจ๋ฅด๋Š” ๋‚ด์šฉ๋“ค์„ ํšŒ๊ณ ํ•˜๋ฉฐ ๋‹ค์‹œ ์ž๋ฐ”๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”?

JVM์ด๋ผ๋Š” ๊ฒŒ ์žˆ์–ด ์šด์˜์ฒด์ œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๋˜‘๊ฐ™์ด ์‹คํ–‰๋œ๋‹ค.(OS์— ๋”ฐ๋ฅธ ๊ท€์ฐฎ์Œ์ด ์‚ฌ๋ผ์ง„๋‹ค.)

GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์ด ์žˆ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋„ ๋น„๊ต์  ํŽธํ•˜๋‹ค.

ํŠน์ง•

  • ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ: JVM๋งŒ ์žˆ์œผ๋ฉด OS์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด: ํด๋ž˜์Šค, ์ƒ์†, ์บก์Аํ™”, ๋‹คํ˜•์„ฑ ๋“ฑ์„ ์ง€์›ํ•œ๋‹ค.
  • Garbage Collection: JVM์ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•จ.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์›: ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์™œ OS๋ฅผ ํƒ€์ง€ ์•Š์„๊นŒ?

์ด๊ฑธ ์•Œ๋ ค๋ฉด ์ž๋ฐ”์˜ ๋™์ž‘ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ์ž๋ฐ” ์†Œ์ŠคํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด๊ฒŒ ๋๋‚˜๋ฉด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(. class)๊ฐ€ ๋‚˜์˜จ๋‹ค

!!์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ž€?: JVM๋งŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ

  1. ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ JVM์˜ ClassLoader์—๊ฒŒ ์ „๋‹ฌํ•ด ์ค˜์„œ ๋ฏธ๋ฆฌ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค.
  • ClassLoader: ํ•„์š”ํ•œ .class ํŒŒ์ผ๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋“œ
  • Bytecode Verifier: ๋กœ๋“œ๋œ ํด๋ž˜์Šค๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ
  • Runtime Data Area(๋Ÿฐํƒ€์ž„ ๋ฉ”๋ชจ๋ฆฌ): ํด๋ž˜์Šค/๊ฐ์ฒด ์ •๋ณด๋ฅผ ์ ์žฌ
  • Excution Engine(์‹คํ–‰ ์—”์ง„): ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰
    • ์ฒ˜์Œ์—๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ํ•œ ์ค„์”ฉ ์ฝ์–ด์„œ ์‹คํ–‰
    • ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ์ง€ํ•ด์„œ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ(ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์‹คํ–‰๋˜๊ธฐ์— ๋น ๋ฅด๋‹ค)
  1. ์‹คํ–‰

Call by value

์ž๋ฐ”์—์„œ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ ์ธ์ž๋Š” ๊ฐ’์œผ๋กœ ์ „๋‹ฌ(call by value)

  • ๊ธฐ๋ณธํ˜• ํƒ€์ž…๋“ค์€ ์ง„์งœ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธด๋‹ค.
  • ์ฐธ์กฐํ˜• ํƒ€์ž…๋“ค์€ ์ฐธ์กฐ๊ฐ’(์ฃผ์†Œ)๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธด๋‹ค.
    • ๊ทธ๋ž˜์„œ ์›๋ณธ ๊ฐ์ฒด ๋‚ด๋ถ€ ํ•„๋“œ๋Š” ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค
void modify(StringBuilder sb) { sb.append(" world"); // ๊ฐ€๋Šฅ sb = new StringBuilder(); // ์ด๊ฑด ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜์˜ ์•ˆ ๋จ }

์ž๋ฃŒํ˜•์ด๋‚˜, ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ์„ ์“ธ ๋•Œ ๊ฟ€ํŒ

1. ์ž๋ฐ” ์—ฐ์‚ฐ์˜ ์ตœ์†Œ ๋‹จ์œ„๋Š” Int๋‹ค. ์•”๋งŒ ๋ฐ”์ดํŠธ๋‹ˆ Short๋‹ˆ ์ž๋ฃŒํ˜• ๋„ฃ๊ณ  ์—ฐ์‚ฐ๋–„๋ ค๋„ ๊ฒฐ๊ณผ๋Š” Int๋‹ค.

byte a = 1, b = 2; byte c = a + b; // ์˜ค๋ฅ˜ → int๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ ํ˜• ๋ณ€ํ™˜ ํ•„์š”

 

2. ์ˆซ์ž ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ๋•Œ, ์–ธ๋”๋ฐ”(_)๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ๋‹ค.(์ž๋ฐ” 7 ์ด์ƒ)

int million = 1_000_000;

 

3. ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•  ๋•Œ ์‹œ์ž‘์— \u๋ฅผ ๋ถ™์ด๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

System.out.println('\uAC00'); // ๊ฐ€

 

4. ์ž๋ฐ”๋Š” C์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ [0,1]์ด [false, true]๊ฐ€ ์•ˆ๋œ๋‹ค.

if (1) {} // โŒ ์ปดํŒŒ์ผ ์—๋Ÿฌ

 

5. Label์ด๋ผ๋Š” ๊ฑธ ํ™œ์šฉํ•ด์„œ ์ค‘์ฒฉ๋œ for๋ฌธ์„ ํ•œ ๋ฒˆ์— ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.(๊ทผ๋ฐ ๋‚จ๋ฐœํ•˜์ง€ ๋ง์ž. ๊ฐ€๋…์„ฑ ์•ˆ ์ข‹๋‹ค.)

outer: for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j == 2) break outer; } }

 

 

 

 

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ์ฝ”๋“œ ์™ธ ์ž‘์„ฑํ•  ๊ฒƒ๋“ค  (0) 2024.07.17
[JAVA] ์ƒ์†  (0) 2024.07.17
[JAVA] ๊ฐ์ฒด  (0) 2024.07.16
[JAVA] ์ž๋ฃŒ๊ตฌ์กฐ  (0) 2024.07.15
[JAVA] ๋ณ€์ˆ˜  (0) 2024.07.15