λ‘œμΌ“πŸΎ
article thumbnail

μžλ°”μ˜ μž‘λ™μ›λ¦¬λ₯Ό κ³΅λΆ€ν•˜λ˜ 쀑 λ°”μ΄νŠΈ 파일과 λ°”μ΄λ„ˆλ¦¬ 파일의 κ°œλ…μ„ μˆ™μ§€ν•΄μ•Όλ˜μ„œ κ΄€λ ¨ 글을 μ“°κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 

 

Complieκ³Ό Link

 

Cμ–Έμ–΄λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ†ŒμŠ€νŒŒμΌ(*.c)이 λͺ©μ νŒŒμΌ(*.obj)둜 λ³€ν™˜λ  λ•Œ λ°”μ΄λ„ˆλ¦¬ 파일 , 즉 0κ³Ό 1둜 이루어진 μ½”λ“œλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 

λͺ©μ νŒŒμΌμ€ 컴퓨터가 이해할 수 μžˆλŠ” λ°”μ΄λ„ˆλ¦¬ μ½”λ“œμ˜ ν˜•νƒœμ΄μ§€λ§Œ 싀행될 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” μ™„μ „ν•œ 기계어가 μ•„λ‹ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

*μ†ŒμŠ€νŒŒμΌ : κ°œλ°œμžκ°€ μž‘μ„±ν•˜λŠ” κ³ λ ˆλ²¨μ–Έμ–΄μΈ μ†ŒμŠ€μ½”λ“œλ‘œ κ΅¬μ„±λœ 파일 ex. *.java, *.py

*λͺ©μ νŒŒμΌ : μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•΄μ„œ 생긴 파일 ex. λ°”μ΄νŠΈμ½”λ“œ, λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ



컴파일러 에 μ˜ν•΄ λ³€ν™˜λœ λͺ©μ νŒŒμΌμ€ 링컀 에 μ˜ν•΄ μ‹€ν–‰κ°€λŠ₯ν•œ μ‹€ν–‰νŒŒμΌ(*.exe)둜 λ³€ν™˜λ  λ•Œ ν•¨μˆ˜λ‚˜ 헀더 파일 λ“±μ˜ μ‹€μ œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ½”λ“œμ— λ°˜μ˜ν•˜λŠ” κ³Όμ •μ—μ„œ 일뢀 μ£Όμ†Œκ°’μ΄ λ³€κ²½λ˜λŠ”λ°, μ΄λŸ¬ν•œ 과정을 거쳐야 λΉ„λ‘œμ†Œ 컴퓨터가 μ‹€ν–‰ν•  수 μžˆλŠ” 100% 기계어가 될 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

*링컀 : μ†ŒμŠ€μ½”λ“œ 양이 λŠ˜μ–΄λ‚¨μ— 따라 ν•œ νŒŒμΌμ— λͺ¨λ“  μ†ŒμŠ€μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μ—†κ²Œ λ˜μ–΄ νŒŒμΌλ“€μ€ 뢄리해야 ν–ˆλŠ”λ°, 이런 μ—¬λŸ¬ μ†ŒμŠ€μ½”λ“œ νŒŒμΌλ“€μ„ ν•˜λ‚˜λ‘œ 합쳐주고, μΆ”κ°€λ‘œ Library도 μΆ”κ°€ν•΄μ£Όμ–΄ μ‹€ν–‰νŒŒμΌμ„ λ§Œλ“€μ–΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨

결둠적으둜 λͺ©μ νŒŒμΌμ€ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œμ΄μ§€λ§Œ 컴퓨터가 λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” 100% κΈ°κ³„μ–΄λŠ” μ•„λ‹™λ‹ˆλ‹€. 링컀λ₯Ό 거쳐야 컴퓨터가 μ‹€ν–‰ν•  수 μžˆλŠ” μ‹€ν–‰νŒŒμΌμ΄ λ©λ‹ˆλ‹€.

 

 

μžλ°”μ—μ„œμ˜ λ°”μ΄νŠΈμ½”λ“œ?

 


μžλ°”μ—μ„œμ˜ μ»΄νŒŒμΌλŸ¬λŠ” μ’€ νŠΉμ΄ν•œλ° μ†ŒμŠ€νŒŒμΌ(*.java)이 λͺ©μ νŒŒμΌ(*.class)둜 μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³€ν™˜λ  λ•Œ λ°”μ΄λ„ˆλ¦¬μ½”λ“œκ°€ μ•„λ‹Œ λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ΄ λ‘˜μ˜ μ°¨μ΄μ μ€ λ¬΄μ—‡μΌκΉŒ??

*λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ(이진 μ½”λ“œ)λž€? 
- 컴퓨터가 인식할 수 μžˆλŠ” 0κ³Ό 1둜 κ΅¬μ„±λœ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ₯Ό μ˜λ―Έν•œλ‹€.

- CPUκ°€ 이해할 수 μžˆλŠ” μ–Έμ–΄

 


*λ°”μ΄νŠΈ μ½”λ“œλž€?
- CPUκ°€ 이해할 수 μžˆλŠ” μ–Έμ–΄κ°€ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλΌλ©΄ λ°”μ΄νŠΈ μ½”λ“œλŠ” 가상 λ¨Έμ‹ (ex. JVM)이 이해할 수 μžˆλŠ” 언어이닀.
  즉, 가상머신이 이해 ν•  수 μžˆλŠ” 0κ³Ό 1둜 κ΅¬μ„±λœ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ₯Ό μ˜λ―Έν•œλ‹€.
- κ³ λ ˆλ²¨μ–Έμ–΄λ‘œ μž‘μ„±λœ μ†ŒμŠ€μ½”λ“œλ₯Ό 가상 머신이 이해할 수 μžˆλŠ” 쀑간 μ½”λ“œλ‘œ μ»΄νŒŒμΌν•œ 것을 λ§ν•œλ‹€.
- μžλ°”μ—μ„œ λ°”μ΄νŠΈ μ½”λ“œλŠ” μ‹€μ‹œκ°„ λ²ˆμ—­κΈ°(JIT, just in time) μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ‘œ λ³€ν™˜λœλ‹€.

 

 

*기계어
- 0κ³Ό 1둜 이루어진 λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ‘œ JSκ°€ λΈŒλΌμš°μ €λ₯Ό μ œμ–΄ν•˜λ“―μ΄ κΈ°κ³„μ–΄λŠ” CPUλ₯Ό μ œμ–΄ν•  수 μžˆλ‹€.
- CPUκ°€ 해독할 수 μžˆλŠ” μœ μΌν•œ μ–Έμ–΄λ‹€. κ·Έ μ–΄λ–€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό λ„£μ–΄μ€˜λ„ κΈ°κ³„μ–΄λ‘œ 해석이 λ˜μ–΄μ•Ό
  λΉ„λ‘œμ†Œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.
- κΈ°κ³„μ–΄λŠ” λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ‘œ κ΅¬μ„±λ˜μ§€λ§Œ λͺ¨λ“  λ°”μ΄λ„ˆλ¦¬ μ½”λ“œκ°€ 기계어인 것은 μ•„λ‹ˆλ‹€.

 

맺으며..

 

μžλ°” λ™μž‘μ— μžˆμ–΄μ„œ κΌ­ μ•Œκ³ μžˆμ–΄μ•Ό ν•˜λŠ” κ°œλ…λ“€μΈκ²ƒ κ°™μŠ΅λ‹ˆλ‹€. μžλ°”λΏλ§Œ μ•„λ‹ˆλΌ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° 언어에 곡톡적인 κ°œλ…μ΄λ―€λ‘œ 개발자라면 μ•Œκ³  μžˆμ–΄μ•Ό ν•˜λŠ” λ‚΄μš©μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. μš”μ¦˜ μžλ°”μ™€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 파고파고파고 ν•˜λŠ”λ° μ΄λž˜μ„œ μ΄λ ‡κ²Œ μž‘λ™ν–ˆμ—ˆκ΅¬λ‚˜ ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ 재미λ₯Ό λŠλ‚λ‹ˆλ‹€. μ½”λ”© ν• λ•Œλž‘μ€ 또 λ‹€λ₯Έ μž¬λ―ΈμΈκ²ƒ κ°™μŠ΅λ‹ˆλ‹€.

 

μ†ŒμŠ€νŒŒμΌ, λͺ©μ νŒŒμΌ, μ‹€ν–‰νŒŒμΌ // 컴파일러, 링컀 // λ°”μ΄νŠΈμ½”λ“œ, λ°”μ΄λ„ˆλ¦¬μ½”λ“œ 

 

μ΄λ ‡κ²Œλ§Œ μ•Œμ•„λ„ λŒ€λž΅μ μΈ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ–΄λ–»κ²Œ 인간언어(κ³ λ ˆλ²¨μ–Έμ–΄)μ—μ„œ 컴퓨터언어(μ €λ ˆλ²¨μ–Έμ–΄)둜 λ³€ν™˜λ˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 더 μžμ„Έν•œκ±΄ μžλ°”μ˜ λ™μž‘κ³Όμ •μ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

 

 

μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

 

profile on loading

Loading...