πŸ› οΈBackend/⚑Python

[Python] 파이썬 인터프리터(Interperter) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

junbin2 2025. 4. 17. 18:34

1. 인터프리터(Interperter)

 - Interperter : "톡역사"λΌλŠ” 의미λ₯Ό κ°€μ§€κ³  있음.

 - μΈν„°ν”„λ¦¬ν„°λŠ” ν•œ 쀄씩 λ°”λ‘œλ°”λ‘œ 읽고 톡역을 ν•΄μ„œ 싀행을 ν•΄μ€€λ‹€λŠ” 의미λ₯Ό κ°€μ§€κ³  있음.

 - μ‰½κ²Œλ§ν•΄, ν”„λ‘œκ·Έλž¨μ΄ 싀행이 되면 μ‹€μ‹œκ°„μœΌλ‘œ ν•œ 쀄씩 ν•΄μ„ν•΄μ„œ 싀행을 ν•œλ‹€λŠ” λ§μž„.

 - 상상이 μ•ˆκ°ˆν…Œλ‹ˆ, λ°”λ‘œ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ‹€ν–‰ κ³Όμ •μœΌλ‘œ μ•Œλ €μ£Όκ² μŒ.

 


2. 파이썬 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •

(1) μ†ŒμŠ€μ½”λ“œ μž‘μ„±

 - .py ν™•μž₯자λ₯Ό κ°€μ§€λŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό μ˜λ―Έν•¨.

 

(2) μ†ŒμŠ€μ½”λ“œ μ‹€ν–‰

 - 내뢀적인 λͺ…λ Ήμ–΄ python test.py -> test.py 파이썬 μ½”λ“œ μ‹€ν–‰

 

(3) 파이썬 인터프리터 μ‹€ν–‰

 - 파이썬 μΈν„°ν”„λ¦¬ν„°μ•ˆμ—λŠ” μ»΄νŒŒμΌλŸ¬μ™€ 인터프리터 2κ°œκ°€ λ‚΄μž₯이 λ˜μ–΄μžˆμŒ.

 

(4) 컴파일러 μ‹€ν–‰ - λ°”μ΄νŠΈμ½”λ“œ λ³€ν™˜

 - 컴파일 단계에선 λͺ¨λ“  μ†ŒμŠ€μ½”λ“œλ₯Ό 읽어 ꡬ문 뢄석, μ½”λ“œ λ³€ν™˜(λ°”μ΄νŠΈμ½”λ“œ) λ₯Ό μˆ˜ν–‰ν•œλ‹€.

 - μ†ŒμŠ€μ½”λ“œ -> λ°”μ΄νŠΈμ½”λ“œ(.pyc)둜 λ³€ν™˜

 - μ΄λ•Œ λ§Œλ“€μ–΄μ§€λŠ”, λ°”μ΄νŠΈμ½”λ“œμ—λŠ” 인터프리터가 ν•œ 쀄씩 ν•΄μ„ν•˜κΈ° μ’‹κ²Œ λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ†“λŠ”λ‹€.

 

(5) 인터프리터 μ‹€ν–‰ - λ°”μ΄νŠΈμ½”λ“œλ₯Ό μš΄μ˜μ²΄μ œκ°€ 읽을 수 μžˆλŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜

 - 컴파일이 된 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 역할을 ν•˜λ©°, κΈ°κ³„μ–΄λ‘œ λ³€ν™˜μ„ ν•΄μ€€λ‹€.

 - μΈν„°ν”„λ¦¬ν„°λ‘œμ¨, ν•œ 쀄씩 ν•΄μ„ν•˜λ©° κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ„œ 운영체제둜 λ„˜κ²¨μ£Όλ©΄, μš΄μ˜μ²΄μ œκ°€ μ½”λ“œλ₯Ό 싀행함.

 - μš΄μ˜μ²΄μ œλŠ” λ©”λͺ¨λ¦¬μ— λ³€μˆ˜λ‚˜, 객체 λ“±μ˜ 곡간을 할당함.

 - 사싀상 λ°”μ΄νŠΈμ½”λ“œμ—λŠ” λ…Όλ¦¬μ μœΌλ‘œ 이미 μ½”λ“œκ°€ ν•œμ€„μ”© 읽도둝 νŽΈν•˜κ²Œ 정리가 λ˜μ–΄μžˆμŒ.

 - 즉, ν•œ 쀄씩 μ‹€ν–‰λ˜λŠ” 게 μ•„λ‹ˆλΌ, μ½”λ“œμ˜ 논리적인 흐름을 λ°”νƒ•μœΌλ‘œ 순차적으둜 μ²˜λ¦¬λ˜λŠ” 쀑간 μ½”λ“œκ°€ λ°”μ΄νŠΈ μ½”λ“œμΈ μ…ˆμ΄λ‹€.

 - λ…Όλ¦¬μ μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯ν•œ 짧은 λ‹¨μœ„λ‘œ 잘라 λ†“μ•˜λŠ”λ°, 그것이 ν•œ μ€„λ‘œ ν‘œν˜„μ΄ 된 것이닀.

 - μ΄λŸ°μ‹μœΌλ‘œ λ°”μ΄νŠΈμ½”λ“œ 논리적 λ‹¨μœ„ -> 인터프리터 기계어 λ³€ν™˜ -> 운영체제 μ‹€ν–‰ ( λ°˜λ³΅μ„ 함 )

 

3. 파이썬 인터프리터 ν•¨μˆ˜μ™€ 클래슀 읽기

 - κ·Έλ ‡λ‹€λ©΄, μΈν„°ν”„λ¦¬ν„°λŠ” ν•¨μˆ˜μ™€ 클래슀λ₯Ό μ–΄λ–»κ²Œ μ½μ„κΉŒ?

 

(1) ν•¨μˆ˜

add(1, 2) # 였λ₯˜

def add(a, b):
  print(a + b)

add(1, 2) # 정상 μ‹€ν–‰

 - μ˜ˆμ‹œ μ½”λ“œμ™€ 같이 ν•¨μˆ˜κ°€ μ‘΄μž¬ν•˜κ³ , ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€κ³  κ°€μ •ν•  λ•Œ μœ„μ˜ add() 호좜 라인은 였λ₯˜κ°€ λ‚  것이닀.

 - κ·Έ μ΄μœ λŠ”, μΈν„°ν”„λ¦¬ν„°λŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ 읽기 λ•Œλ¬Έμ— μœ„μ˜ add() ν˜ΈμΆœμ„ ν•˜λ €κ³  해도 λ©”λͺ¨λ¦¬μ— def ν•¨μˆ˜κ°€ μ •μ˜λ˜μ–΄μžˆμ§€ μ•ŠκΈ°λ•Œλ¬Έ

 - 즉, μΈν„°ν”„λ¦¬ν„°λŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ μ½λŠ” κ³Όμ •μ—μ„œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•œ 뢀뢄을 λ§Œλ‚˜κ²Œ 되면, ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯을 ν•˜κ²Œ λœλ‹€.

 - κ·ΈλŸ¬λ‹€ ν•¨μˆ˜ 호좜 뢀뢄을 λ§Œλ‚˜λ©΄ κΈ°μ–΅ν•œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μ½”λ“œλΈ”λ‘μ„ μ‹€ν–‰ν•˜λŠ” 원리이닀.

 - 클래슀 λ˜ν•œ λ§ˆμ°¬κ°€μ§€μ΄λ‹€.

 

(2) import

# test5.py
import test4
test4.add(1, 2)
# import test4 -> μ—λŸ¬λ‚¨

# test4.py
def add(a, b):
  print(a + b)

 - μ΄λ ‡κ²Œ importλ₯Ό 맨 μœ„μ— μ„ μ–Έν•˜λŠ” μ΄μœ λ„ μΈν„°ν”„λ¦¬ν„°μ˜ λ™μž‘ 원리 λ•Œλ¬ΈμΈ 것이닀.

 - μΈν„°ν”„λ¦¬ν„°μ˜ μ˜ν•΄ ν•΄λ‹Ή import 라인이 읽히게 되면, 파일(λͺ¨λ“ˆ)의 λ‚΄μš©μ„ λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•˜κ³  λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€.

 - κ·Έλ ‡κΈ° λ•Œλ¬Έμ— import 라인이 λ§¨μœ„μ— μžˆλŠ” 것이닀. ( 참고둜 μ•„λž˜μ— 두고 ν•΄λ‹Ή ν•¨μˆ˜ 호좜 μ‹œ 였λ₯˜ )

 


4. 정리

 - 정리λ₯Ό ν•˜λ©΄, νŒŒμ΄μ¬μ—μ„œ μΈν„°ν”„λ¦¬ν„°λŠ” ν•˜λ‚˜μ˜ 파이썬 μ–Έμ–΄λ‘œ λ§Œλ“€μ–΄μ§„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž¨μž„.

 - 파이썬 μΈν„°ν”„λ¦¬ν„°μ—λŠ” "컴파일러", "인터프리터" 두 κ°€μ§€κ°€ λ“€μ–΄κ°€ 있음. 즉, νŒŒμ΄μ¬μ€ 두 κ°€μ§€λ₯Ό λ™μ‹œμ— μ΄μš©μ„ 함.

 - 즉, λ‹€λ₯Έ 언어와 λ‹€λ₯΄κ²Œ νŒŒμ΄μ¬μ€ μ‹€ν–‰ μ‹œ, 인터프리터 ν•œ κ³³μ—μ„œ 컴파일 인터프리터 두 κ°€μ§€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©° 싀행됨.

 - μžλ°”λ₯Ό 예둜 λ“€λ©΄, μžλ°”λŠ” 컴파일 μ‹œ .class νŒŒμΌμ„ 직접 κ°€μ§€κ³  μžˆλ‹€κ°€ ν•΄λ‹Ή νŒŒμΌμ„ JVM에 λ„˜κ²¨ μ‹€ν–‰ν•˜λŠ” λ°©μ‹μž„.

 - 차이λ₯Ό 보면, νŒŒμ΄μ¬μ€ .pyc νŒŒμΌμ„ 직접 κ°€μ§€κ³  μžˆμ§€ μ•Šκ³  λ°”λ‘œ 싀행을 μ‹œν‚€λŠ” λŠλ‚Œμ΄λΌ 보면될듯.

- 인터프리터 자체의 κ°œλ…μ„ μ΄ν•΄ν•˜κΈ° λ³΄λ‹€λŠ”, 직접 μ–Έμ–΄λ₯Ό μ΄μš©ν•΄ 흐름을 보면 생각보닀 맀우 μ‰¬μš΄ κ°œλ…μž„.