λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Java

[Java] μžλ°”λž€?

λ°˜μ‘ν˜•

μžλ°”λž€?

  • μ²˜μŒλΆ€ν„° 객체 지ν–₯μ–Έμ–΄λ‘œ 개발된 ν”„λ‘œκ·Έλž˜λ° 언어이닀.
  • μžλ°” 가상 λ¨Έμ‹ (JVM)을 μ‚¬μš©ν•˜μ—¬, μš΄μ˜μ²΄μ œμ™€λŠ” λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•  수 μžˆλ‹€.
    β‡’ μžλ°”λŠ” μ–΄λŠ μš΄μ˜μ²΄μ œμ—μ„œλ‚˜ 같은 ν˜•μ±„λ‘œ 싀행될 수 μžˆλ‹€.
  • μ „ μ„Έκ³„μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 쀑 ν•˜λ‚˜μ΄λ‹€.

μžλ°”μ˜ νŠΉμ§•

μž₯점

  1. μš΄μ˜μ²΄μ œμ™€λŠ” λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.
  2. λΆˆν•„μš”ν•œ κΈ°λŠ₯을 과감히 μ œκ±°ν•˜μ—¬ λ‹€λ₯Έ 언어에 λΉ„ν•΄ λ°°μš°κΈ°κ°€ 쉽닀.
  3. μžλ™ λ©”λͺ¨λ¦¬ 관리 등을 μ§€μ›ν•˜μ—¬ λ‹€λ₯Έ 언어에 λΉ„ν•΄ μ•ˆμ •μ„±μ΄ λ†’λ‹€.
  4. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ κΈˆμ§€ν•˜κ³  μ œλ„€λ¦­μ„ λ„μž…ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ 가독성을 λ†’μ˜€λ‹€.
  5. μˆ˜λ§Žμ€ μ°Έκ³  자료λ₯Ό 찾을 수 μžˆλ‹€.

단점

  1. 싀행을 μœ„ν•΄ μžλ°” 가상 머신을 거쳐야 ν•˜λ―€λ‘œ, λ‹€λ₯Έ 언어에 λΉ„ν•΄ μ‹€ν–‰ 속도가 λŠλ¦¬λ‹€.
  2. μ˜ˆμ™Έ μ²˜λ¦¬κ°€ 잘 λ˜μ–΄ μžˆμ§€λ§Œ, κ°œλ°œμžκ°€ 일일이 처리λ₯Ό 지정해 μ€˜μ•Ό ν•œλ‹€λŠ” λΆˆνŽΈν•¨μ΄ μžˆλ‹€.
  3. λ‹€λ₯Έ 언어에 λΉ„ν•΄ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ½”λ“œμ˜ 길이가 κΈ΄ νŽΈμ΄λ‹€.

μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ κ³Όμ •

  • μžλ°” 컴파일러
    • μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό 가지고 μž‘μ„±ν•œ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€.
    • μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ°”λ₯Ό μ„€μΉ˜ν•˜λ©΄ javac.exeλΌλŠ” μ‹€ν–‰ 파일 ν˜•μ±„λ‘œ μ„€μΉ˜λ©λ‹ˆλ‹€.
  • μžλ°” λ°”μ΄νŠΈ μ½”λ“œ
    • μžλ°” λ°”μ΄νŠΈ μ½”λ“œλž€ μžλ°” 가상 머신이 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λ³€ν™˜λœ μžλ°” μ†ŒμŠ€ μ½”λ“œλ₯Ό μ˜λ―Έν•œλ‹€.
    • μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λ˜λŠ” μ½”λ“œμ˜ λͺ…λ Ήμ–΄ 크기가 1λ°”μ΄νŠΈλΌμ„œ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλΌκ³  뢈리고 μžˆλ‹€.
    • μžλ°” λ°”μ΄νŠΈ μ½”λ“œμ˜ ν™•μž₯μžλŠ” .class이닀.
    • μžλ°” 가상 λ¨Έμ‹ λ§Œ μ„€μΉ˜λ˜μ–΄ 있으면, μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλΌλ„ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μžλ°” 가상 λ¨Έμ‹ 
    • μžλ°” 가상 λ¨Έμ‹ μ΄λž€ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•œ κ°€μƒμ˜ 기계라고 ν•  수 μžˆλ‹€.
    • μžλ°”λ‘œ μž‘μ„±λœ λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžλ°” 가상 머신이 ν•„μš”ν•˜λ‹€.
    • μ˜€λΌν΄μ€ λŒ€λΆ€λΆ„μ˜ μ£Όμš” 운영체제뿐만 μ•„λ‹ˆλΌ μ›Ή λΈŒλΌμš°μ €, 슀마트 폰, κ°€μ „κΈ°κΈ° λ“±μ—μ„œλ„ μžλ°” 가상 머신을 μ†μ‰½κ²Œ μ„€μΉ˜ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜κ³  μžˆλ‹€.
      • λ‹€λ₯Έ μš΄μ˜μ²΄μ œλΌλ„ μžλ°” 가상 λ¨Έμ‹ λ§Œ μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄, 같은 μžλ°” ν”„λ‘œκ·Έλž¨μ΄ μ•„λ¬΄λŸ° μΆ”κ°€ 쑰치 없이 λ™μž‘ν•  수 μžˆλ‹€.
    • μžλ°” 가상 머신은 μš΄μ˜μ²΄μ œμ— μ’…μ†μ μ΄λ―€λ‘œ, 각 μš΄μ˜μ²΄μ œμ— λ§žλŠ” μžλ°” 가상 머신을 μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.
    • μžλ°” 가상 λ¨Έμ‹ μ˜ ꡬ성
      • μžλ°” 인터프리터(interpreter) : μžλ°” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λœ μžλ°” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό 읽고 ν•΄μ„ν•˜λŠ” 역할을 ν•œλ‹€.
      • 클래슀 λ‘œλ”(class loader) : μžλ°”λŠ” λ™μ μœΌλ‘œ 클래슀λ₯Ό μ½μ–΄μ˜€λ―€λ‘œ, ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑인 λŸ°νƒ€μž„μ—μ„œμ•Ό λͺ¨λ“  μ½”λ“œκ°€ μžλ°” 가상 λ¨Έμ‹ κ³Ό μ—°κ²°λœλ‹€. μ΄λ ‡κ²Œ λ™μ μœΌλ‘œ 클래슀λ₯Ό λ‘œλ”©ν•΄μ£ΌλŠ” 역할을 ν•˜λŠ” 것이 λ°”λ‘œ 클래슀 λ‘œλ”μ΄λ‹€.
      • JIT 컴파일러(Just-In-Time compiler) : ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑인 λŸ°νƒ€μž„μ— μ‹€μ œ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄ μ£ΌλŠ” 컴파일러λ₯Ό μ˜λ―Έν•œλ‹€. 동적 λ²ˆμ—­(dynamic translation)이라고도 λΆˆλ¦¬λŠ” 이 기법은 ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 속도λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ κ°œλ°œλ˜μ—ˆλ‹€.
      • 가비지 컬렉터(garbage collector) : λ”λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ νšŒμˆ˜ν•΄ μ€€λ‹€. λ”°λΌμ„œ κ°œλ°œμžκ°€ λ”°λ‘œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λ˜λ―€λ‘œ, λ”μš± μ†μ‰½κ²Œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

참고 자료

TCP School

λ°˜μ‘ν˜•

'Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] 슀트림(Stream)  (0) 2022.02.16
[Java] μžλ°” μ»¬λ ‰μ…˜ Map  (0) 2022.01.11
[Java] μžλ°” μ»¬λ ‰μ…˜ Set  (0) 2022.01.11
[Java] String 클래슀 정리  (0) 2022.01.08
[Java] μƒμ†μ΄λž€?  (0) 2022.01.06