PL(Programming Language)/Java

[Java] ์ž๋ฐ” ์‹œ์ž‘

ํƒฑ์ ค 2021. 3. 11. 15:30

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ ์™„์ „ ๊ธฐ์ดˆ


์ปดํ“จํ„ฐ์™€ ์†Œํ”„ํŠธ์›จ์–ด

ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋งŒ๋Šฅ ๊ธฐ๊ณ„์ธ ์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

  • ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด(์ปดํ“จํ„ฐ ์–ธ์–ด, ๊ธฐ๊ณ„์–ด)

  • ๊ธฐ๊ณ„์–ด
    • 0, 1์˜ ์ด์ง„์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ์–ธ์–ด
    • ์ปดํ“จํ„ฐ์˜ CPU๋Š” ๊ธฐ๊ณ„์–ด๋งŒ ์ดํ•ด, ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ

  • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด
    •  ๊ธฐ๊ณ„์–ด ๋ช…๋ น์„ ADD, SUB, MOVE๋“ฑ๊ณผ ๊ฐ™์€ ํ‘œํ˜„ํ•˜๊ธฐ ์‰ฌ์šด ์ƒ์ง•์ ์ธ ๋‹จ์–ด์ธ ๋‹ˆ๋ชจ๋‹‰ ๊ธฐํ˜ธ(mnemonic symbol)๋กœ ์ผ๋Œ€์ผ ๋Œ€์‘์‹œํ‚จ ์–ธ์–ด
    • (๊ธฐ๊ณ„์–ด BASE, ์ž์ฃผ ์“ฐ๋Š” ๊ธฐํ˜ธ๋“ค ์ด์šฉํ•ด์„œ ๋Œ€์‘, ์ž์ฃผ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์ƒ์ง•ํ•ด์ฃผ๋Š” ์–ธ์–ด)

  • ๊ณ ๊ธ‰์–ธ์–ด
    • ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ๋ณต์žกํ•œ ์ž‘์—…, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์–ธ์–ด
    • ์ ˆ์ฐจ ์ง€ํ–ฅ ์–ธ์–ด์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
    • ๊ณ ๊ธ‰ ์–ธ์–ด(High-quality) ์ €๊ธ‰ ์–ธ์–ด(Low-quality)๋Š” quality๋กœ ๋‚˜๋‰˜๋Š” ๊ฒƒ์œผ๋กœ, ๊ธ‰์ด ๋‚ฎ๊ณ  ๋†’์Œ์ด ์•„๋‹˜!! ์—ฌ๊ธฐ์„œ quality๋Š” ๋‹จ๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด ๊ณ ๊ธ‰ ์–ธ์–ด๋Š” ์ €๊ธ‰ ์–ธ์–ด๋ณด๋‹ค ๊ฑฐ์ณ์•ผ ํ•  ๋‹จ๊ณ„๊ฐ€ ๋ณต์žกํ•œ ์–ธ์–ด๋ฅผ ์˜๋ฏธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์ปดํŒŒ์ผ

  • ์†Œ์Šค: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ํŒŒ์ผ
  • ์ปดํŒŒ์ผ: ์†Œ์Šค ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ • (๋ฒˆ์—ญ ๊ณผ์ •)
  • ์ปดํŒŒ์ผ๋Ÿฌ: ์ปดํŒŒ์ผ์„ ์ง„ํ–‰์‹œํ‚ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด
  • ์ž๋ฐ”์˜ ๊ฒฝ์šฐ .java ๊ฐ€ ์ปดํŒŒ์ผ๋˜์–ด .class ๊ฐ€ ๋จ

โ˜ž  ์—ฐ์Šต๋ฌธ์ œ

  1. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ์ฃผ๋กœ ์–ด๋””์— ์‚ฌ์šฉ๋˜๋Š”๊ฐ€?

    HW๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด

  2. ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์€?

    ์ปดํŒŒ์ผ

  3. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋กœ C++ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

    X

์ž๋ฐ”์˜ ์‹œ์ž‘

  • ์„ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์˜ ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง์— ์˜ํ•ด ์‹œ์ž‘ (๊ฐ€์ „์ œํ’ˆ์— ๋“ค์–ด๊ฐˆ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ)
  • 1995๋…„์— ๋ฐœํ‘œ
  • ๋ชฉ์  (๊ธฐ์กด ์–ธ์–ด์˜ ๋‹จ์ , ๊ณ ์Šฌ๋ง์ด ๋Š๊ผˆ๋˜ ๋ฌธ์ œ์ )
    1. ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ
      • ๊ธฐ์กด ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ PC, ์œ ๋‹‰์Šค, ๋ฉ”์ธ ํ”„๋ ˆ์ž„ ๋“ฑ ํ”Œ๋žซํผ ๊ฐ„ ํ˜ธํ™˜ ์•ˆ๋จ
      • ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ ์ž‘์„ฑํ•ด์•ผํ•จ

    2. ํ”Œ๋žซํผ ๋…๋ฆฝ์  ์–ธ์–ด ๊ฐœ๋ฐœ
      • ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ˜ธํ™˜์„ฑ ๊ฐ–๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํ•„์š”
      • ๋„คํŠธ์›Œํฌ, ํŠนํžˆ ์›น์— ์ตœ์ ํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•„์š”์„ฑ

    3. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ๊ณ  ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ๊ฐ€์ง€๋Š” ๊ฐ€์ „ ์ œํ’ˆ์— ์ ์šฉ
      • ๊ฐ€์ „ ์ œํ’ˆ: ์ž‘์€ ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋Š” ์ œ์–ด ์žฅ์น˜
      • ๋‚ด์žฅํ˜• ์‹œ์Šคํ…œ ์š”๊ตฌ ์ถฉ์กฑ

  • ์ดˆ๊ธฐ ์ด๋ฆ„ --> ์˜คํฌ(OAK)
  • 2009๋…„์— ์˜ค๋ผํด์ด ์„ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ ์ธ์ˆ˜

์ž๋ฐ”์˜ ํŠน์ง•

๊ธฐ์กด ์–ธ์–ด์˜ ํ”Œ๋žซํผ ์ข…์†์„ฑ

  • ๊ฐ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋‹ค ๋งŒ๋“ค์–ด์•ผํ•จ
  • ๊ธฐ๊ณ„์–ด๊ฐ€ CPU๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , ์šด์˜์ฒด์ œ๋งˆ๋‹ค API์™€ ์‹คํ–‰ํŒŒ์ผ ํ˜•์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ

์ž๋ฐ”์˜ ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ, WORA(Write Once Run Anywhere)

  • ํ•œ ๋ฒˆ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ์ž๋ฐ”์˜ ํŠน์ง•, ํ”Œ๋žซํผ๋งˆ๋‹ค ๊ฐœ๋ฐœํ•  ํ•„์š” X
  • C/C++ ๋“ฑ ๊ธฐ์กด ์–ธ์–ด๊ฐ€ ๊ฐ€์ง„ ํ”Œ๋žซํผ ์ข…์†์„ฑ ๊ทน๋ณต
  • ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์–ด๋Š ํด๋ผ์ด์–ธํŠธ์—์„œ๋‚˜ ์‹คํ–‰ (์›น ๋ธŒ๋ผ์šฐ์ €, ๋ถ„์‚ฐ ํ™˜๊ฒฝ ์ง€์›)

WORA๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ž๋ฐ”์˜ ํŠน์ง•

  • ๋ฐ”์ดํŠธ ์ฝ”๋“œ (byte code)
    • ์ž๋ฐ” ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•œ ๋ชฉ์  ์ฝ”๋“œ
    • CPU์— ์ข…์†์ ์ด์ง€ ์•Š์€ ์ค‘๋ฆฝ์ ์ธ ์ฝ”๋“œ
    • JVM์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ
    • JVM์ด ์ž‘๋™ ์ค‘์ธ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰ (JVM์— ์˜ํ•ด ํ•ด์„, ์‹คํ–‰)
    • ํด๋ž˜์Šค ํŒŒ์ผ(.class)์— ์ €์žฅ

  • JVM(Java Virtual Machine)
    • ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (์†Œํ”„ํŠธ์›จ์–ด)
    • ๊ทธ ๊ธฐ๊ณ„์— ๋งž์ถค ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊ฟ”์คŒ
    • ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์— ์„ค์น˜ (ํ”Œ๋žซํผ ์ข…์†์ )
    • ๋™์ผํ•œ ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ ์ œ๊ณต

  • ์ž๋ฐ”์˜ ์‹คํ–‰
    • JVM์ด ํด๋ž˜์Šค ํŒŒ์ผ(.class)์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์‹คํ–‰

  • JVM์€ ๊ฐ ๊ธฐ๊ณ„์— ๋งž๊ฒŒ ์žˆ์–ด์„œ ์ข…์†์ ์ด๊ณ , ์ž๋ฐ” ์ž์ฒด(.class)๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ด๋‹ค

์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ™˜๊ฒฝ

  • ์‹คํ–‰ ํ™˜๊ฒฝ
    • ์ž๋ฐ” ๊ฐ€์ƒ ๊ธฐ๊ณ„ + ์ž๋ฐ” API(์ž๋ฐ” ํ”Œ๋žซํผ์˜ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋‚จ์ด ์งœ๋†“์€ ์ฝ”๋“œ๋“ค)

  • ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
    • main() ๋ฉ”์†Œ๋“œ ๊ฐ€์ง„ ํด๋ž˜์Šค์˜ main() ์—์„œ ์‹คํ–‰ ์‹œ์ž‘
    • JVM์€ ํ•„์š”ํ•  ๋•Œ ํด๋ž˜์Šค ํŒŒ์ผ ๋กœ๋”ฉ, ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ


์ž๋ฐ”์˜ ํŠน์„ฑ

  1. ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ
    • ํ•˜๋“œ์›จ์–ด, ์šด์˜์ฒด์ œ์— ์ข…์†๋˜์ง€ ์•Š์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ

  2. ๊ฐ์ฒด์ง€ํ–ฅ
    • ์บก์Šํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ ์ง€์›

  3. ํด๋ž˜์Šค๋กœ ์บก์Šํ™”
    • ์ž๋ฐ”์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค ๋‚ด์— ์„ ์–ธ
    • ํด๋ž˜์Šค ์•ˆ์—์„œ ํด๋ž˜์Šค(๋‚ด๋ถ€ ํด๋ž˜์Šค) ์ž‘์„ฑ ๊ฐ€๋Šฅ 

  4. ์†Œ์Šค(.java)์™€ ํด๋ž˜์Šค(.class) ํŒŒ์ผ
    • ํ•˜๋‚˜์˜ ์†Œ์Šค ํŒŒ์ผ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํด๋ž˜์Šค ์ž‘์„ฑ ๊ฐ€๋Šฅ --> public ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅ
    • ์†Œ์Šค ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ public์œผ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค ์ด๋ฆ„์€ ๊ฐ™์•„์•ผ ํ•จ.
    • ํด๋ž˜์Šค ํŒŒ์ผ์—๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋งŒ ์กด์žฌ --> ๋‹ค์ˆ˜์˜ ํด๋ž˜์Šค ๊ฐ€์ง„ ์ž๋ฐ” ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋ฉด ํด๋ž˜์Šค๋งˆ๋‹ค ๋ณ„๋„๋กœ ํด๋ž˜์Šค ํŒŒ์ผ ์ƒ์„ฑ๋จ

  5. ์‹คํ–‰ ์ฝ”๋“œ ๋ฐฐํฌ
    • ํ•œ ๊ฐœ์˜ class ํ˜น์€ ๋‹ค์ˆ˜์˜ class ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์—ฌ๋Ÿฌ ํด๋”์— ๊ฑธ์ณ ๋‹ค์ˆ˜์˜ ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ jar ์••์ถ• ํŒŒ์ผ๋กœ ๋ฐฐํฌ
    • ์ž๋ฐ” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์€ main() ๋ฉ”์†Œ๋“œ์—์„œ ์‹œ์ž‘
      • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ํŒŒ์ผ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ main()๋ฉ”์†Œ๋“œ ์žˆ์„ ์ˆ˜ ์—†์Œ but ๊ฐ ํด๋ž˜์Šค ํŒŒ์ผ์ด main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ์ƒ๊ด€ ์—†์Œ

  6. ํŒจํ‚ค์ง€
    • ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌ
    • ํด๋”(ํ†ต) ๊ฐœ๋…

  7. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ
    • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ๋™์‹œ ์ˆ˜ํ–‰ ํ™˜๊ฒฝ ์ง€์› (multitask)
    • ์šด์˜์ฒด์ œ(OS)์˜ ๋„์›€ ์—†์ด ์ž์ฒด์ ์œผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์› (C/C++ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์œ„ํ•ด ์šด์˜์ฒด์ œ API ํ˜ธ์ถœ)

  8. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (garbage collection)
    • ์ž๋ฐ” ์–ธ์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ธฐ๋Šฅ ์žˆ์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜ ๊ธฐ๋Šฅ ์—†์Œ
      • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” JVM์— ์˜ํ•ด ์ž๋™ ๋ฐ˜ํ™˜ --> ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
    • ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฉด ์ƒ๊ด€ ์—†๋Š”๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํฌ๋ฉด ๊ฐ‘์ž๊ธฐ ๋ฉˆ์ถฐ ๋‹จ์ ,, ์–‘๋‚ ์˜ ๊ฒ€

  9. ์‹ค์‹œ๊ฐ„ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— ๋ถ€์ ํ•ฉ
    • ์‹คํ–‰ ๋„์ค‘ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์‹œ์ ์— ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹คํ–‰ ๋•Œ๋ฌธ -> ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ์‹œ์  ์ค‘๋‹จ ๋ฐœ์ƒ

  10. ์•ˆ์ „
    • ํƒ€์ž… ์ฒดํฌ๊ฐ€ ์•ˆ์ „ํ•˜๊ณ  ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํฌ์ธํ„ฐ ๊ฐœ๋…์ด ์—†์–ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

  11. ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‰ฌ์›€
    • ํฌ์ธํ„ฐ ๊ฐœ๋… X
    • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜ X
    • ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›

์ฐธ๊ณ 

๋ช…ํ’ˆ ์ž๋ฐ” ์—์„ผ์…œ(์ƒ๋Šฅ์ถœํŒ, ํ™ฉ๊ธฐํƒœ ์ €)

728x90