λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» Computer Science/운영체제

compile(컴파일)κ³Ό runtime(λŸ°νƒ€μž„) 차이

by Jay Din 2023. 5. 27.
728x90
λ°˜μ‘ν˜•

compile (컴파일) μ΄λž€?

μ†ŒμŠ€μ½”λ“œκ°€ compile(컴파일)μ΄λž€ 과정을 톡해 기계어가 읽을 수 μžˆλŠ” ν˜•νƒœλ‘œ λ³€ν™˜λœλ‹€. 이 과정을 컴파일 νƒ€μž„μ΄λΌκ³  ν•œλ‹€.

λ°˜μ‘ν˜•

기계어가 읽을 수 μžˆλŠ” ν˜•νƒœλ‘œ μš°λ¦¬κ°€ ν”νžˆ .exeνŒŒμΌμ„ λ“€ 수 μžˆλ‹€.

ν”„λ‘œμ νŠΈ μ•„λž˜ κ²½λ‘œμ— 듀어가보면 .exe νŒŒμΌμ„ λ°œκ²¬ν•  수 μžˆλ‹€.

이 파일이 기계가 읽을 수 μžˆλŠ” ν˜•νƒœμΈ 것이닀.

 

compile error λž€?

compile 쀑 λ°œμƒλ˜λŠ” μ—λŸ¬λ₯Ό μ˜λ―Έν•œλ‹€.

λŒ€ν‘œμ μœΌλ‘œ syntax errorκ°€ ν•΄λ‹Ήλœλ‹€.

syntax μ—λŸ¬λž€ μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄ 문법에 λ§žμ§€ μ•ŠλŠ” 코딩을 ν–ˆμ„ 경우 λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό μ˜λ―Έν•œλ‹€.

 

예λ₯Ό λ“€λ©΄,

μ•„λž˜μ™€ 같은 경우 μ†Œκ΄„ν˜Έλ‘œ λ‹«μ•„μ•Ό ν•˜λŠ”λ° μ€‘κ΄„ν˜Έλ‘œ 닫은 κ²½μš°μ΄λ‹€.

print("hello"}

 

SyntaxError

μ΄λŸ¬ν•œ 였λ₯˜λ“€μ΄ compile error 이닀.

이외에도 ideμ—μ„œ 싀행전에 λΉ¨κ°„μ€„λ‘œ 였λ₯˜λ₯Ό μ•Œλ ¬μ€€λ‹€.

 

Java 언어와 컴파일

기본적으둜 compile (컴파일)은 μ†ŒμŠ€μ½”λ“œλ₯Ό 기계(H/W)κ°€ 이해할 수 μžˆλŠ”  κΈ°κ³„μ–΄λ‘œ λ°”κΏ”μ€€λ‹€.

ν•˜μ§€λ§Œ Java 같은 κ²½μš°λŠ” 쑰금 λ‹€λ₯΄λ‹€.

Java μ–Έμ–΄λ₯Ό 컴파일 ν•˜λ©΄ λ°”μ΄νŠΈ μ½”λ“œκ°€ μƒμ„±λœλ‹€. μ΄λŠ” 컴퓨터(H/W)κ°€ 이해할 수 μ—†λŠ” 언어이닀.

Javaκ°€ μ»΄νŒŒμΌν•œ μ–Έμ–΄λ₯Ό 이해할 수 μžˆλŠ” κΈ°κ³„λŠ” JVM(Java Virtual Machine)이닀.

 

즉,

  1. μžλ°” μ†ŒμŠ€μ½”λ“œ(.java)λ₯Ό μžλ°” 컴파일러(Java Compiler)κ°€ μžλ°” μ†ŒμŠ€νŒŒμΌμ„ 컴파일 ν•œλ‹€.
  2. 이 λ•Œ μžλ°” λ°”μ΄νŠΈ μ½”λ“œ(.class)파일이 λ‚˜μ˜¨λ‹€. 이 νŒŒμΌμ€ 아직 컴퓨타가 읽을 수 μ—†μ§€λ§Œ JVM이 이해할 수 μžˆλŠ” μ½”λ“œμ΄λ‹€.
  3. 컴파일된 λ°”μ΄νŠΈ μ½”λ“œλ₯Ό JVM의 클래슀 λ‘œλ”(Class Loader)μ—κ²Œ μ „λ‹¬ν•œλ‹€.
  4. 클래슀 λ‘œλ”λŠ” 동적 λ‘œλ”©μ„ 톡해 ν•„μš”ν•œ ν΄λž˜μŠ€λ“€μ„  λ‘œλ”© 및 λ§ν¬ν•˜μ—¬ λŸ°νƒ€μž„ 데이터 μ˜μ—­, 즉 JVM의 λ©”λͺ¨λ¦¬μ— μ˜¬λ¦°λ‹€.
λ°˜μ‘ν˜•

 

runtime(λŸ°νƒ€μž„) μ΄λž€?

compile 이후 ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘λ˜μ–΄μ§ˆ λ•Œλ₯Ό runtime이라고 ν•œλ‹€.

μœ„μ— μ„€λͺ…ν•œ exeνŒŒμΌμ„ λ™μž‘μ‹œν‚€λŠ” 과정이닀.

즉, μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ΄ μ»΄ν“¨ν„°μ—μ„œ 잘 μž‘λ™ν•˜λ„λ‘ λ•λŠ” 역할을 ν•œλ‹€.

JAVA와 같은 μ–Έμ–΄λ‘œ μž‘μ„±ν•œ ν”„λ‘œκ·Έλž¨μ€ 컴퓨터가 이해할 수 μžˆλ„λ‘ "λ²ˆμ—­"을 거쳐야 ν•˜κ³ , 이 λ²ˆμ—­λœ μ½”λ“œλ₯Ό μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λŠ” 과정을 λ„μ™€μ£ΌλŠ” 것이 runtime ν™˜κ²½μ΄λ‹€.

 

λŸ°νƒ€μž„ ν™˜κ²½μ˜ μ£Όμš” μ—­ν• 

  1. μ½”λ“œ μ‹€ν–‰:
    • C# μ½”λ“œλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ μ΅œμ’…μ μœΌλ‘œ "기계어"둜 λ³€ν™˜λ˜μ–΄μ•Ό 컴퓨터가 μ‹€ν–‰ν•  수 μžˆλ‹€. .NET λŸ°νƒ€μž„ ν™˜κ²½μ€ 쀑간 λ‹¨κ³„λ‘œ C# μ½”λ“œλ₯Ό "쀑간 μ–Έμ–΄"둜 λ²ˆμ—­ν•œ ν›„, 이λ₯Ό μ‹€μ œλ‘œ μ‹€ν–‰ν•  수 있게 도와쀀닀.
  2. λ©”λͺ¨λ¦¬ 관리:
    • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄μ„œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 ν• λ‹Ήν•˜κ³ , 더 이상 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” κΈ°λŠ₯도 λ‹΄λ‹Ήν•œλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 같은 λ¬Έμ œμ— λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ 쀄어든닀.
  3. 였λ₯˜ 감지:
    • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” 였λ₯˜λ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 역할을 ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 잘λͺ»λœ 값이 μž…λ ₯λ˜κ±°λ‚˜ νŒŒμΌμ„ 읽을 수 μ—†λŠ” μƒν™©μ—μ„œ ν”„λ‘œκ·Έλž¨μ΄ 예기치 μ•Šκ²Œ λ©ˆμΆ”μ§€ μ•Šκ³ , 였λ₯˜λ₯Ό μΈμ‹ν•˜μ—¬ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•œλ‹€.

 

λŸ°νƒ€μž„ ν™˜κ²½μ˜ 유무

  • λŸ°νƒ€μž„ ν™˜κ²½μ΄ μ—†λ‹€λ©΄:
    • λͺ¨λ“  μ½”λ“œκ°€ 직접 μš΄μ˜μ²΄μ œκ°€ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜κ³ , λ©”λͺ¨λ¦¬ κ΄€λ¦¬λ‚˜ 였λ₯˜ μ²˜λ¦¬λ„ μš°λ¦¬κ°€ λͺ¨λ‘ μˆ˜λ™μœΌλ‘œ ν•΄μ•Ό ν•œλ‹€.
  • λŸ°νƒ€μž„ ν™˜κ²½μ΄ μžˆλ‹€λ©΄:
    • ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œκ°€ μƒν˜Έμž‘μš©ν•  λ•Œ λ°œμƒν•  수 μžˆλŠ” λ³΅μž‘ν•œ 일을 λŸ°νƒ€μž„μ΄ 도와쀀닀. ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³ , 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μ²˜λ¦¬ν•΄μ£Όλ©°, μ½”λ“œ 싀행을 도와쀀닀.

 

runtime error(λŸ°νƒ€μž„ μ—λŸ¬) λž€?

runtime μ—λŸ¬λŠ” 싀행이 λ˜μ–΄μ•Όλ§Œ 확인이 κ°€λŠ₯ν•œ μ—λŸ¬μ΄λ‹€.

즉, compile μ€‘μ—λŠ” κ°μ§€ν•˜μ§€ λͺ»ν•˜λŠ” μ—λŸ¬λ“€μ΄ μžˆλ‹€.(ide 상 λΉ¨κ°„μ€„λ‘œ λœ¨μ§€ μ•ŠμŒ)

 

예λ₯Ό λ“€λ©΄,

4개의 숫자λ₯Ό 가진 리슀트(λ°°μ—΄)이 μžˆλ‹€.

arr = [1,2,3,4]
print(arr[100])

길이가 4인 λ°°μ—΄μ—μ„œ 100번째 값을 읽으렀고 ν•˜λ‹ˆ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

문법적(syntax)μœΌλ‘œλŠ” 였λ₯˜κ°€ μ—†μ§€λ§Œ 싀행을 ν•΄λ³΄λ‹ˆ λ°œμƒλ˜λŠ” μ—λŸ¬μ΄λ‹€. 

runtime error: Index Error

λ˜ν•œ λ‹€λ₯Έ μ˜ˆμ‹œλ‘œλŠ”, 0으둜 값을 λ‚˜λˆ„λŠ” κ²½μš°λ„ λŸ°νƒ€μž„ μ—λŸ¬μ— ν•΄λ‹Ήν•œλ‹€.

print(10/0)

ZerorDivisionError

코딩을 ν•  땐 문법적 였λ₯˜κ°€ μ—†μ—ˆμ§€λ§Œ 막상 μ‹€ν–‰ν•΄λ³΄λ‹ˆ μ—λŸ¬κ°€ λ°œμƒν•œ 것이닀.


μ°Έκ³ 

https://blog.kakaocdn.net/dn/eCBmlV/btqzbWDehNR/Hg0fQvktIsli3NrwNuGrg0/img.png

https://yeko90.tistory.com/entry/compile-time%EC%BB%B4%ED%8C%8C%EC%9D%BC-%ED%83%80%EC%9E%84-vs-runtime%EB%9F%B0%ED%83%80%EC%9E%84-%EC%B0%A8%EC%9D%B4

https://helpdeskgeek.com/wp-content/pictures/2020/09/Windows-Run-EXE.png

 

728x90
λ°˜μ‘ν˜•