ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/μžλ°”

1. μžλ°” ν”„λ‘œκ·Έλž˜λ° μ‹œμž‘ν•˜κΈ°

alswlfl 2026. 5. 27. 02:01

ν”„λ‘œκ·Έλž˜λ°κ³Ό μžλ°”

ν”„λ‘œκ·Έλž˜λ°: 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 일

ν”„λ‘œκ·Έλž˜λ¨Έ: ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” μ‚¬λžŒ

ν”„λ‘œκ·Έλž¨: μ»΄ν“¨ν„°μ—κ²Œ 일을 μ‹œν‚€λŠ” λͺ…λ Ήμ˜ μ§‘ν•©(= μ†ŒμŠ€ μ½”λ“œ μ§‘ν•© + 컴파일된 κ²°κ³Όλ¬Ό)

 

컴파일(compile): λ§Œλ“  ν”„λ‘œκ·Έλž¨μ΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 문법에 잘 λ§žλŠ”μ§€ ν™•μΈν•˜κ³ , 컴퓨터가 이해할 수 μžˆλŠ” μ–Έμ–΄λ‘œ λ²ˆμ—­ν•˜λŠ” μž‘μ—…

컴파일러(compiler): 컴파일 μž‘μ—…μ„ ν•˜λŠ” ν”„λ‘œκ·Έλž¨


μžλ°”λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

1. ν”Œλž«νΌμ— 영ν–₯을 λ°›μ§€ μ•Šμ•„ λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • μžλ°”λŠ” 'ν•œ 번 μž‘μ„±ν•˜λ©΄, μ–΄λ””μ„œλ“  λŒμ•„κ°„λ‹€(write once, run anywhere)'λΌλŠ” μŠ¬λ‘œκ±΄μ„ 가짐
  • ν”Œλž«νΌμ— μ’…μ†λ˜μ§€ μ•ŠλŠ” ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•΄ μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ μ‹€ν–‰ κ°€λŠ₯함
  • 예λ₯Ό λ“€μ–΄ μœˆλ„μš° μš΄μ˜μ²΄μ œμ—μ„œ Cμ–Έμ–΄λ‘œ κ°œλ°œν•œ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 파일(.exe)은 λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œλŠ” μ‹€ν–‰ν•  수 μ—†μŒ.
    [Cμ–Έμ–΄ ν”„λ‘œκ·Έλž¨ 컴파일 κ³Όμ •]
    Cμ–Έμ–΄ μ†ŒμŠ€ μ½”λ“œ(test.c) → μ „μ²˜λ¦¬κΈ°(preprocessor)  μ»΄νŒŒμΌλŸ¬(compiler)[μ–΄μ…ˆλΈ”λ¦¬ μ–Έμ–΄λ‘œ λ³€ν™˜]  μ–΄μ…ˆλΈ”λŸ¬(assembler)[λͺ©μ  파일]  λ§μ»€(linker)[링킹] → μ‹€ν–‰νŒŒμΌ(test.exe)
  • ν•˜μ§€λ§Œ, μžλ°”λŠ” μ‹€ν–‰ 파일이 μ•„λ‹Œ λ°”μ΄νŠΈ μ½”λ“œ(.class)라고 ν•˜λŠ” νŒŒμΌμ„ 생성해 μš΄μ˜μ²΄μ œμ—μ„œ 직접 μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 가상 λ¨Έμ‹ μ—μ„œ λ¨Όμ € μ‹€ν–‰ν•˜κ³ , 이 가상 머신이 μš΄μ˜μ²΄μ œμ— λ§žλŠ” μ™„λ²½ν•œ μ‹€ν–‰ 파일(.exe)둜 λ°”κΏ”μ€Œ
    [Java ν”„λ‘œκ·Έλž¨ 컴파일 κ³Όμ •]
    μžλ°” μ†ŒμŠ€ μ½”λ“œ(test.java) → μžλ°” 컴파일러[λ°”μ΄νŠΈ μ½”λ“œ(test.class)] → JVM에 μ˜ν•΄ μ‹€ν–‰
  • μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 속도가 λŠλ¦¬λ‹€λŠ” 평이 λ§Žμ•˜μ§€λ§Œ, ν•˜λ“œμ›¨μ–΄κ°€ λ°œμ „ν•˜λ©΄μ„œ μžλ°” μ»΄νŒŒμΌλŸ¬λ„ JIT(Just In Time) 컴파일 λ°©μ‹μœΌλ‘œ κ°œμ„ λ˜μ–΄ μ‹€ν–‰ μ†λ„λŠ” 아무 λ¬Έμ œκ°€ μ—†μŒ
μžλ°” 가상 λ¨Έμ‹ (Java Virtual Machine: JVM): μžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ ν™˜κ²½μ„ λ§Œλ“€μ–΄ μ£ΌλŠ” μ†Œν”„νŠΈμ›¨μ–΄
- μžλ°” μ½”λ“œ μ»΄νŒŒμΌν•΄ .class λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ§Œλ“€λ©΄ 이 μ½”λ“œκ°€ μžλ°” 가상 λ¨Έμ‹  ν™˜κ²½μ—μ„œ 싀행됨
- ν˜„μž¬ μ‚¬μš©ν•˜λŠ” μ»΄ν“¨ν„°μ˜ μš΄μ˜μ²΄μ œμ— λ§žλŠ” μžλ°” μ‹€ν–‰ ν™˜κ²½(Java Runtime Environment: JRE)이 μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄ μžλ°” 가상 머신이 μ„€μΉ˜λ˜μ–΄ μžˆλŠ” κ²ƒμž„

JIT(Just In Time) 컴파일러: μ‹€ν–‰ μ‹œμ μ— 기계어 μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ”λ°, 같은 μ½”λ“œκ°€ 반볡되면 맀번 기계어 μ½”λ“œλ₯Ό μƒˆλ‘œ μƒμ„±ν•˜μ§€ μ•Šκ³  이전에 λ§Œλ“  기계어λ₯Ό μž¬μ‚¬μš©ν•¨
- JIT μ»΄νŒŒμΌλŸ¬λŠ” μš΄μ˜μ²΄μ œμ— 맞게 λ°”μ΄νŠΈ μ‹€ν–‰ μ½”λ“œλ‘œ ν•œ λ²ˆμ— λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ΄μ „μ˜ μžλ°” 해석기(Java interpreter) 방식보닀 μ„±λŠ₯이 10~20λ°° μ’‹μŒ

 

2. 객체 μ§€ν–₯ 언어이기 λ•Œλ¬Έμ— μœ μ§€λ³΄μˆ˜κ°€ 쉽고 ν™•μž₯성이 μ’‹λ‹€.

  • 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 일의 μˆœμ„œλŒ€λ‘œ ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” 것이 μ•„λ‹Œ μ—¬λŸ¬ 객체의 ν˜‘λ ₯을 톡해 ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜λŠ” 것이닀.
  • μžλ°”λŠ” 객체 μ§€ν–₯ 언어이닀.
  • ex) νšŒμ›, μƒν’ˆ, μ£Όλ¬Έ, 배솑 등이 객체가 되고, 각 객체 κ°„μ˜ μƒν˜Έ 관계 μ΄μš©ν•΄ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것
  • κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 뢀뢄을 μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ ν”„λ‘œκ·Έλž¨μ— μƒˆ κΈ°λŠ₯을 μ‰½κ²Œ μΆ”κ°€ κ°€λŠ₯함
  • λ”°λΌμ„œ, μœ μ§€λ³΄μˆ˜κ°€ 쉽고 ν™•μž₯성이 μ’‹μŒ

3. ν”„λ‘œκ·Έλž¨μ΄ μ•ˆμ •μ μ΄λ‹€.

  • μžλ°”λŠ” 비ꡐ적 μ΅œκ·Όμ— μΆœμ‹œλœ μ–Έμ–΄λ‘œ κΈ°μ‘΄ μ–Έμ–΄κ°€ κ°€μ§€λŠ” λͺ¨ν˜Έμ„±κ³Ό λΆˆμ•ˆμ •ν•œ 뢀뢄을 과감히 μ—†μ• κ³  κ°œμ„ ν•¨
  • C/C++μ—μ„œ μ œκ³΅ν•˜λŠ” 문법인 포인터λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„ λ©”λͺ¨λ¦¬λ₯Ό 직접 μ œμ–΄ν•  수 μ—†μŒ
  • ν”„λ‘œκ·Έλž¨μ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό 직접 μ œμ–΄ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλŠ”λ°, μ΄λŸ¬ν•œ μœ„ν—˜μ„±μ΄ μ—†μ–΄ 훨씬 μ•ˆμ •μ μΈ μ½”λ“œλ₯Ό λ§Œλ“€ 수 있음
  • 동적 λ©”λͺ¨λ¦¬ 수거λ₯Ό ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν•˜μ§€ μ•Šκ³  κ°€λΉ„μ§€ 컬렉터(GC)λ₯Ό μ΄μš©ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 관리 κ°€λŠ₯함

4. ν’λΆ€ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€μ΄λ‹€.

  • 기쑴의 λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” νŠΉμ • κΈ°λŠ₯을 λŒ€λΆ€λΆ„ κ°œλ°œμžκ°€ 직접 κ°œλ°œν•΄μ„œ μ‚¬μš©ν•¨
  • μžλ°”λŠ” κΈ°λ³Έ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 클래슀, 자료ꡬ쑰, λ„€νŠΈμ›Œν¬, μž…μΆœλ ₯, μ˜ˆμ™Έ 처리 등에 μ΅œμ ν™”λœ μ•Œκ³ λ¦¬μ¦˜ 라이브러리λ₯Ό μ œκ³΅ν•˜λŠ” μžλ°” 개발 ν‚€νŠΈ(Java Development Kit: JDK)κ°€ 있음