가비지 컬렉터(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 |