개발자 블로그

[윤성우의 열혈 파이썬 중급편] - 1. 레퍼런스 카운트와 가비지 컬랙션 본문

파이썬/윤성우의 열혈 파이썬 중급편

[윤성우의 열혈 파이썬 중급편] - 1. 레퍼런스 카운트와 가비지 컬랙션

hayongwoon 2022. 4. 25. 22:33

가비지 컬랙션이란?

 레퍼런스 카운트가 0이라는 것은 아무것도 참조하고 있지 않다는 것으로 메모리 내에서 소멸 대상이 된다. 소멸 대상이 되었다고 해서 바로 소멸이 되진 않지만, 시스템에 시간적 여유가 있을 때 소멸시키게 된다. 이러한 일련의 과정들이 '가비지 컬렉션'이라고 한다.

 

 즉, 레퍼런스 카운트가 0인 값은 소멸 대상이 되고, 시스템에 시간적 여유가 있을 때 소멸시키는 일련의 과정이다.

 

그렇다면 레퍼런스레퍼런스 카운트는 무엇인가!

 

파이썬에서의 변수는 빈상자에 담아둔다라는 개념보다는 '포스트 잇'과 같이 떼었다 붙였다 하는 개념이다.

즉, 참조(레퍼런스)는 이름이 쓰여진(변수명) 포스트잇을 붙인 것이라고 생각하면 된다. 

따라서 레퍼런스 카운트는 객체를 참조하는 변수의 수이다.

 

그러면 가비지 컬랙션은 누가 해주는 거지...?

실제 파이썬 프로그램의 실행 주체는 파이썬 가상머신, 줄여서 PVM(python virtual machin)이라고 하며, 가비지 컬렉션도 PVM에서 진행이 된다고 한다.

파이썬 실행 구조

1) 우리가 파이썬 코드(스크립트)를 작성하고 실행하면 이 코드는 먼저 '바이트 코드'라는 것으로 변환되어 어딘가 저장이 된다.

 

2) 이 바이트 코드는 '파이썬 가상 머신' 위에서 실행이 된다.

 

 

파이썬 인터프리터

 파이썬 소스코드를 바이트 코드로 변환시키는 변환기와 각종 라이브러리 및 가상 머신을 묶어 '파이썬 인터프리터'라고 한다. 

 

 파이썬 인터프리터에는 몇 가지 종류가 있는데, PVM의 구현 방식에 나뉘는데, C언어로 구현되어 있는 것(CPython )이 가장 일반적이고, 그 외에도 Java로 구현 되어 자바에 대한 접근성이 좋은 Jython, 마이크로 소프트 사의 닷넷 기반으로 구현된 IronPython도 있다.

여기서는 다양한 종류의 인터프리터가 존재한다는 사실 정도만 알아두면 좋겠다.