pickle 모듈은 객체를 직렬화하는데 사용된다. 객체를 직렬화 한다는 것은 메모리에 있는 객체를 바이트 스트림으로 변환하여 저장하거나 전송할 수 있도록 하는 과정을 의미합니다. 직렬화된 데이터는 파일에 저장할 수 있거나 네트워크를 통해 다른 시스템으로 전송될 수 있으며, 이후에 다시 객체로 복원하는 역직렬화가 가능하다.
참고!! -> 바이트 스트림이란?
바이트 스트림이란 데이터를 바이트 단위로 연속적으로 읽거나 쓸 수 있는 흐름을 의미합니다. 컴퓨터 시스템에서 데이터를 전송하거나 저장할 때 데이터는 0과 1로 표현되는 바이트로 구성되며, 이 바이트들이 연속적으로 흐르는 형태를 가진다.
그렇다면 왜 직렬화를 하는 걸까??
1. 데이터 저장 : 객체의 상태를 파일이나 데이터베이스에 저장하기 위해 직렬화를 사용한다. 프로그램이 종료된 후에도 객체의 데이터를 보존할 수 있어서 나중에 다시 불러와 사용할 수 있다.
2. 네트워크 전송
분산 시스템이나 클라이언트- 서버 아키텍처에서 객체를 네트워크를 통해 전송해야 할때 직렬화가 필요하다. 네트워크에서는 객체를 바이트 스트림 형태로 데이터를 전송해야 하므로, 객체를 바이트로 변환하여 전송한다.
3. 호환성
서로 다른 플랫폼 간에 데이터를 교환할 때, 직렬화된 형식은 데이터를 일관되게 유지합니다. JSON과 XML과 같은 표준 포멧을 사용하면, 다양한 시스템에서 데이터를 이해하고 처리할 수 있다.
4. 이전 상태 복원
프로그램이 중단되거나 재시작할 때 이전에 저장된 직렬화된 상태를 불러와 객체의 상태를 복원할 수 있습니다. 이는 데이터의 일관성을 유지하는데 도움이 됩니다.
5. 캐시
자주 사용되는 데이터를 직렬화하여 캐시에 저장하면, 다음에 필요할 때 빠르게 불러올 수 있어 성능을 향상 시킬 수 있습니다.
pickle 모듈의 함수의 종류
pickle.load(file)
파일에서 직렬화된 객체를 읽어서 역직렬화 합니다.
저장된 데이터에서 객체를 복원하여 반환합니다.
pickle.dump(obj, file)
객체를 직렬화 하여 file에 저장합니다.
def save_tasks(tasks):
with open(FILENAME, 'wb') as file:
pickle.dump(tasks, file)
if __name__ == "__main__": 이 구문의 의미는 무엇일까????
파이썬의 코드는 다른 코드에서 모듈로 쓰일 가능성이 있다 그럼 다른 프로그램에서 사용하고 싶다면 이 모듈을 임포트 하면 되며, 메인 프로그램 로직은 사용되지 않는다.
main( ) 함수가 사용되지 않기 때문에 필요한 기능만 추가할 수 있게 된다.!!
Python에서 __name__은 현재 모듈의 이름을 나타내는 특수한 변수이다. 스크립트를 직접 실행할 경우 __name__의 값은 "__main__"으로 설정됩니다. 반면에 다른 모듈에서 이 스크립트를 임포트할 경우, __name__의 값은 해당 모듈의 이름이 됩니다.
결국 이 구문을 넣으면 다른 코드에서 임포트 할때 필요한 부분만 쓸수 있게되고 main( ) 함수는 쓰지 않아도 된다!!
.pkl은 python의 pickle 모듈로 직렬화한 파일임을 나타내는 확장자이다. 이 파일은 pickle을 사용하여 python 객체를 직렬화한 형태로 저장하며, 다른 파일 형식과 달리 이진 바이너리 형식으로 저장됩니다.
pickle 모듈
목적 -> 단순한 데이터 저장 및 복원
확장성 -> 제한적
데이터 검색 -> 불편 (파일을 읽어서 수동으로 검색)
다중 사용자 지원 -> 불가능
언어 종속성 -> 파이썬
데이터베이스
목적 -> 데이터 구조화, 관리, 검색 및 확장
확장성 -> 대규모 데이터 처리 가능
데이터 검색 -> 효율적
다중 사용자 지원 -> 가능
언어 종속성 -> 다양한 언어 지원 간능
pickle은 간단한 데이터를 프로그램 내부적으로 저장하고 불러오는 용도로 적합하며 파일 저장 방식을 데이터베이스로 대체하기에는 기능적 한계가 있습니다.
'python 코딩 공부' 카테고리의 다른 글
| 무한 반복 구문 (0) | 2024.11.02 |
|---|---|
| 예외구문 공부 (2) | 2024.11.02 |
| 프로그래머스 : 등차수열의 특정 항만 더하기 (0) | 2024.10.20 |
| 프로그래머스 : 0떼기 (0) | 2024.10.20 |
| 프로그래머스 : 접미사 배열 (0) | 2024.10.19 |