1-1. Hello, World!

λ”œλ ˆλ§ˆ

  • β€œHello World” ν”„λ‘œκ·Έλž¨λ§Œ μ œλŒ€λ‘œ κ³΅λΆ€ν•˜λ©΄ μžλ°” μ–Έμ–΄μ˜ 절반 이상을 μ΅νžˆλŠ” 것과 닀름 μ—†μŒ
    • β€œHello World” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λ €λ©΄ jdkμ„€μΉ˜, μΈν…”λ¦¬μ œμ΄ μ„€μΉ˜, 클래슀, ν•¨μˆ˜, public에 λŒ€ν•œ κ°œλ…, static에 λŒ€ν•œ κ°œλ…, 그리고 λ§ˆμ§€λ§‰ μ‹€ν–‰κΉŒμ§€.. 이 λͺ¨λ“ κ²ƒμ„ μ•Œμ•„μ•Ό 함

JDK μ„€μΉ˜

  • μžλ°”μ½”λ”©μ„ μ‹œμž‘ν•˜κΈ° 전에 κ°œλ°œν™˜κ²½μ„ λ¨Όμ € μ„ΈνŒ…ν•΄μ•Ό 함
    • κ°œλ°œν™˜κ²½μ΄λž€ μžλ°”λ‘œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μžˆλŠ” μ»΄ν“¨νŒ… ν™˜κ²½μ„ 말함
    • 즉, ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€λ₯Ό μž‘μ„±ν•˜λŠ” 툴, μž‘μ„±ν•œ μ†ŒμŠ€λ₯Ό 컴파일 ν•˜λŠ” ν”„λ‘œκ·Έλž¨λ“±μ„ μ„€μΉ˜ν•΄μ•Όν•¨
  • JDKλŠ” Java Development Kit의 μ•½μž
    • μžλ°” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λˆ„κ΅¬λ‚˜ JDKλ₯Ό μ„€μΉ˜ν•΄μ•Όν•¨
  • μžλ°”λŠ” μ›λž˜ 썬 λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμ¦ˆμ—μ„œ λ§Œλ“€κ³  λ°°ν¬ν–ˆμ§€λ§Œ 였라클이 썬을 μΈμˆ˜ν•¨

μžλ°”μ†ŒμŠ€μ™€ 컴파일

  • JDKλ₯Ό μ„€μΉ˜ν–ˆλ‹€λ©΄ jdkκ°€ μ„€μΉ˜λœ λ””λ ‰ν† λ¦¬μ˜ /usr/bin/에 javac.exe와 java.exe 파일이 μ €μž₯λ˜μ–΄ 있음
    • ν˜Ήμ‹œλΌλ„ java.exe만 있고 javac.exeκ°€ μ—†λ‹€λ©΄ jdkκ°€ μ•„λ‹Œ jreλ₯Ό μ„€μΉ˜ν•œ κ²ƒμ΄λ―€λ‘œ λ‹€μ‹œ jdkλ₯Ό λ‹€μš΄λ‘œλ“œν•΄μ•Όν•¨
  • javacλŠ” java compiler의 μ•½μ–΄, μžλ°”νŒŒμΌμ„ μ»΄νŒŒμΌν•  λ•Œ μ‚¬μš©ν•˜λŠ” 것이 λ°”λ‘œ javac.exe 파일
    • μ»΄νŒŒμΌμ΄λž€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μž‘μ„±ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό 컴퓨터가 이해할 수 μžˆλŠ” 말(기계어)둜 λ°”κΎΈλŠ” ν–‰μœ„
    • λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—λŠ” 컴파일러 λ˜λŠ” 그와 λΉ„μŠ·ν•œ κΈ°λŠ₯을 ν•˜λŠ” 것듀이 있음

μžλ°”νŒŒμΌ μ΄λž€?

  • μš°λ¦¬κ°€ μž‘μ„±ν•΄μ•Ό ν•  μžλ°” ν”„λ‘œκ·Έλž¨
  • 이 μžλ°” ν”„λ‘œκ·Έλž¨μ€ .java λΌλŠ” ν™•μž₯자λ₯Ό 가진 파일둜 μ €μž₯ν•˜κ²Œ λ˜λŠ”λ° μ΄λ ‡κ²Œ μ €μž₯λ˜λŠ” .java νŒŒμΌμ„ μžλ°”νŒŒμΌ λ˜λŠ” μžλ°”μ†ŒμŠ€λΌκ³  함

  • MyProgram.javaλΌλŠ” μžλ°” νŒŒμΌμ„ μž‘μ„±ν–ˆλ‹€λ©΄ ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜λŠ” 지 ν™•μΈν•˜κΈ° μœ„ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€κ³  싢을 λ•Œ

    • μžλ°”λ‘œ μž‘μ„±ν•œ νŒŒμΌμ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” 두 번의 단계λ₯Ό κ±°μ³μ•Όλ§Œ 함
    1. .java νŒŒμΌμ„ .class 파일둜 λ°”κΎΈμ–΄ μ£ΌλŠ” 컴파일 단계
    2. .class νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚€λŠ” 싀행단계
  • μ΄λ ‡κ²Œ 두 단계λ₯Ό 거치면 μš°λ¦¬λŠ” μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœ λ³Ό 수 있음

  • CompilerλŠ” javac.exe에 ν•΄λ‹Ήλ˜κ³  Java VM은 java.exe에 ν•΄λ‹Ή

  • μžλ°”λŠ” μ»΄νŒŒμΌμ„ ν•œ κ²°κ³Όκ°€ exeκ°€ μ•„λ‹Œ classκ°€ 됨
  • C/C++ λ“±μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ μ΅œμ’… 결과물둜 exeνŒŒμΌμ„ λ§Œλ“€μ–΄ 냄
    • exe νŒŒμΌμ€ 계산기와 같은 μœ ν‹Έλ¦¬ν‹°μΌμˆ˜λ„ κ²Œμž„μΌ μˆ˜λ„ 있음
    • μ‚¬μš©μžλŠ” λ‹¨μˆœνžˆ exe ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ°λ§Œ ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœ λ³Ό 수 있음
  • C/C++κ³Ό 같은 μ–Έμ–΄λŠ” 컴파일 된 μ‹€ν–‰ νŒŒμΌμ„ λͺ¨λ“  μš΄μ˜μ²΄μ œμ—μ„œ λ™μΌν•˜κ²Œ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ λΆˆκ°€λŠ₯
    • μœˆλ„μš°μ—μ„œ μ»΄νŒŒμΌν•œ ν”„λ‘œκ·Έλž¨μ„ λ¦¬λˆ…μŠ€μ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†μŒ
    • μžλ°”μ˜ JVMκ³Ό 같은 μ€‘κ°„λ‹¨κ³„μ˜ 역할을 μˆ˜ν–‰ν•˜λŠ” 것이 μ—†κΈ° λ•Œλ¬Έ
  • C/C++ λ“±μ˜ μ–Έμ–΄μ—μ„œ λ§Œλ“€μ–΄μ§„ μ‹€ν–‰νŒŒμΌμ€ JVM같은 쀑간단계λ₯Ό κ±°μΉ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λΉ λ₯Έ μ†λ„λ‘œ μˆ˜ν–‰λ¨
    • ν•˜μ§€λ§Œ μš΄μ˜μ²΄μ œλ§ˆλ‹€ λ³„λ„μ˜ μ‹€ν–‰νŒŒμΌμ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” 단점이 있음
  • μžλ°”λŠ” JVMμ΄λΌλŠ” 쀑간단계가 μžˆμœΌλ―€λ‘œ Cλ“±μ˜ μ–Έμ–΄λ³΄λ‹€λŠ” 속도가 느림
    • ν•˜μ§€λ§Œ ν•œλ²ˆ μž‘μ„±ν•œ νŒŒμΌμ€ μ–΄λ–€ OSμ—μ„œλΌλ„ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 있음
    • ν•œλ²ˆ μž‘μ„±ν•œ 것을 널리 μž¬ν™œμš©ν•˜λŠ” 것이 μžλ°”μ˜ κ°€μž₯ 큰 νŠΉμ§•μ΄μž κ°€μž₯ 큰 μž₯점
    • μžλ°” λ˜ν•œ λ°œμ „μ— λ°œμ „(JIT의 λ„μž…λ“±)을 κ±°λ“­ν•˜μ—¬ μ‹€ν–‰ 속도도 ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 μ œμ–΄ν•˜λŠ” μΌ€μ΄μŠ€λ§Œ μ•„λ‹ˆλΌλ©΄ c/c++ 등에 거의 κ·Όμ ‘ν•˜κ²Œ λ”°λΌμž‘μŒ

reference

점프 투 μžλ°”