파이썬은 강력한 기능과 유연성을 제공하는 프로그래밍 언어입니다.
그러나 이러한 편의성은 메모리 관리 측면에서 과도한 부담을 야기할 수 있습니다.
이에 대비하여 파이썬은 가비지 컬렉션 메커니즘을 통해 메모리를 효율적으로 관리하는데
이번 글에서는 가비지 컬렉션에 대하여 알아보도록 하겠습니다!
1. 가비지 컬렉션이란? Garbage Collection이란?
가비지 컬렉션(Garbage Collection)은 프로그래밍 언어에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 메모리블록을 자동으로 감지하고 해제하는 프로세스를 의미합니다.
2. 가비지 컬렉션의 역할? Garbage Collection의 역할?
가비지 컬렉션(Garbage Collection)은 위에서 설명한 것처럼 메모리를 해제하는 과정, 프로세스를 의미합니다. 이는 프로그램의 효율적인 메모리 사용을 보장하며 메모리 누수와 같은 문제를 방지할 수 있습니다. 또 한 개발자가 수동적으로 메모리를 관리하는 번거로움을 덜어주며 코드의 안정성과 가독성을 향상시킵니다.
3. 파이썬의 가비지 컬렉션 알고리즘
파이썬은 가비지 컬렉션을 수행하기 위해 다양한 알고리즘을 사용합니다. 그 중 대표적인 두가지 알고리즘은 "참조 카운트"와 "세대별 가비지 컬렉션" 입니다.
- 참조 카운트
참조 카운트는 객체가 얼마나 많은 변수나 다른 객체에 의해 참조 되는지를 계산하며, 이 카운트가 0이 되면 객체가 가비지로 간주됩니다.
- 세대별 가비지 컬렉션
세대별 가비지 컬렉션의 경우 객체의 수명을 세대로 나누어 관리하며 오래된 객체일 수록 가비지 컬렉션 주기가 더 길어집니다.
4. 주의 할 점 / 최적화
가비지 컬렉션은 자동으로 이뤄지지만 실수로 불필요한 객체를 오래 유지하여, 성능 저하의 원인을 만들 수 있습니다. 이를 방지하기 위해서 제대로 된 메모리 관리와 객체 사용 패턴을 유지하는것이 중요합니다.
이해를 돕기 위해 간단한 메모리 관리 객체 사용 패턴 예제를 보여드리도록 하겠습니다.
class User:
def __init__(self, name):
self.name = name
# 메모리 누수 예제
def memory_leak_example():
users = []
for i in range(10000):
users.append(User(f"User_{i}"))
print(f"Created user: User_{i}")
# 메인 코드
memory_leak_example()
# 메모리 관리 예제
def proper_memory_management_example():
users = []
for i in range(10000):
user = User(f"User_{i}")
users.append(user)
print(f"Created user: {user.name}")
del users # 명시적으로 참조 해제
# 메인 코드
proper_memory_management_example()
'파이썬(python) 기본' 카테고리의 다른 글
파이썬의 객체 : 변경 불가능한 객체(immutable), 변경 가능한 객체(mutable) (0) | 2023.12.27 |
---|---|
파이썬 클래스: 메타 클래스와 동적 클래스 생성 (0) | 2023.08.16 |
파이썬 기초: 네임스페이스와 스코프 이해하기 (0) | 2023.08.16 |
파이썬 파일 다루기: 입출력과 파일 처리 기초 (0) | 2023.08.16 |
파이썬 내장 함수, 표준 라이브러리: 다양한 내장 함수와 라이브러리 (0) | 2023.08.14 |