본문 바로가기
Python

파이썬 가비지 컬렉터

by 승환파크 2023. 5. 10.

가비지 컬렉터(grabage collector)

프로그램 내부에서 무언가를 생성한다는 것은 메모리에 올린다는 의미이다.

프로그램에서 변수를 만들면 메모리가 데이터에 올라가고, 계속 만들어지면 메모리가 가득 차게 된다.

이 때 메모리가 부족해지면 컴퓨터는 하드디스크를 메모리처럼 사용하는데 이 동작을 스왑(swap) 이라고 한다.

하드디스크는 메모리보다 훨씬 느리기 때문에 스왑을 처리하는 속도 또한 느릴 수 밖에 없다.

따라서 이러한 상황을 만들지 않기 위해서 파이썬에서는 가비지 컬렉터 라는것을 만드는데 가비지 컬렉터는 더 사용할 가능성이 없는 데이터를 자동으로 메모리에서 제거해 메모리를 정리해 주는 역할을 한다.

 

변수에 저장하지 않은 경우(소멸자를 통해 확인하기)

class Test:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} - 생성되었습니다.")
        
    def __del__(self):
        print(f"{self.name} - 파괴되었습니다.")

Test("A")
Test("B")
Test("C")
# 결과값
# A - 생성되었습니다.
# A - 파괴되었습니다.
# B - 생성되었습니다.
# B - 파괴되었습니다.
# C - 생성되었습니다.
# <__main__.Test at 0x7fc08921b1c0>

Test 클래스를 가지고 객체를 생성했는데 변수에 따로 저장을 안했다는 것은 앞으로 더 사용을 하지 않겠다 라는 의미로 해석해 가비지 컬렉터가 자동으로 객체들을 삭제하여 소멸자가 자동으로 실행하는 것을 확인 할 수 있다.

 

변수에 저장한 경우

class Test:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} - 생성되었습니다.")
        
    def __del__(self):
        print(f"{self.name} - 파괴되었습니다.")

a = Test("A")
b = Test("B")
c = Test("C")
# 결과값
# A - 생성되었습니다.
# B - 생성되었습니다.
# C - 생성되었습니다.

변수에 저장했으면 나중에 활용하겠다는 의미로 해석해 프로그램이 종료되는 순간까지 가비지 컬렉터가 따로 메모리에서 제거를 하지 않는다.

'Python' 카테고리의 다른 글

파이썬 상속  (0) 2023.05.10
파이썬 프라이빗 변수와 getter, setter  (1) 2023.05.10
파이썬 클래스 변수와 클래스 메서드  (0) 2023.05.10
파이썬 특수한 이름의 메서드  (1) 2023.05.10
파이썬 isinstance 함수  (0) 2023.05.09