소개
이 프로젝트에서는 Python 에서 불변 딕셔너리 (immutable dictionary) 를 구현하는 방법을 배우게 됩니다. 불변 딕셔너리는 생성 후 수정할 수 없는 데이터 구조로, 데이터가 변경되지 않아야 하는 특정 애플리케이션에서 유용합니다.
👀 미리보기
d["Connection"]='kee-alive'
d["Host"]='www.labex.io'
TypeError("'ImmutableDict' objects are immutable")
TypeError("'ImmutableDict' objects are immutable")
d.get("Host")='www.labex.io'
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다:
- 내장
dict클래스를 상속하는ImmutableDict클래스를 만드는 방법 - 딕셔너리 수정을 방지하기 위해
ImmutableDict클래스에서 메서드를 구현하는 방법 ImmutableDict클래스가 예상대로 작동하는지 테스트하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- 불변 데이터 구조 (immutable data structure) 의 개념과 사용 사례를 이해합니다.
ImmutableDict클래스를 사용하여 Python 에서 불변 딕셔너리를 구현합니다.- 적절한 메서드를 재정의하여 딕셔너리 수정을 방지합니다.
ImmutableDict클래스가 예상대로 작동하는지 테스트합니다.
ImmutableDict 클래스 구현하기
이 단계에서는 immutable_dict.py 파일에서 ImmutableDict 클래스를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
/home/labex/project디렉토리에 있는immutable_dict.py파일을 엽니다.- 내장
dict클래스를 상속하는ImmutableDict라는 새 클래스를 만듭니다.
class ImmutableDict(dict):
- 딕셔너리를 불변 (immutable) 으로 만들기 위해
ImmutableDict클래스에서 다음 메서드를 구현합니다:
def __setitem__(self, key, value):
raise TypeError("'ImmutableDict' objects are immutable")
def __delitem__(self, key):
raise TypeError("'ImmutableDict' objects are immutable")
def pop(self, key, default=None):
raise TypeError("'ImmutableDict' objects are immutable")
def popitem(self):
raise TypeError("'ImmutableDict' objects are immutable")
def clear(self):
raise TypeError("'ImmutableDict' objects are immutable")
def update(self, *args, **kwargs):
raise TypeError("'ImmutableDict' objects are immutable")
def setdefault(self, key, default=None):
raise TypeError("'ImmutableDict' objects are immutable")
이러한 메서드는 dict 클래스의 해당 메서드를 재정의하고 딕셔너리를 수정하려는 시도가 있을 때마다 TypeError 예외를 발생시킵니다.
immutable_dict.py파일을 저장합니다.
ImmutableDict 클래스 테스트
이 단계에서는 ImmutableDict 클래스가 예상대로 작동하는지 테스트합니다. 이 단계를 완료하려면 아래 단계를 따르세요:
/home/labex/project디렉토리에서immutable_dict.py파일을 엽니다.ImmutableDict클래스를 테스트하기 위해 파일 끝에 다음 코드를 추가합니다:
if __name__ == "__main__":
d = ImmutableDict(Connection="kee-alive", Host="www.labex.io")
print(f'{d["Connection"]=}')
print(f'{d["Host"]=}')
try:
d["Host"] = "test.com"
except TypeError as e:
print(repr(e))
try:
d.pop("Host")
except TypeError as e:
print(repr(e))
print(f'{d.get("Host")=}')
immutable_dict.py파일을 저장합니다.- 터미널에서
immutable_dict.py스크립트를 실행합니다:
python3 immutable_dict.py
출력 결과는 다음과 같아야 합니다:
d["Connection"]='kee-alive'
d["Host"]='www.labex.io'
TypeError("'ImmutableDict' objects are immutable")
TypeError("'ImmutableDict' objects are immutable")
d.get("Host")='www.labex.io'
이 출력 결과는 ImmutableDict 클래스가 예상대로 작동하며, 딕셔너리를 수정하려는 시도가 있을 경우 TypeError 예외가 발생함을 보여줍니다.
축하합니다! ImmutableDict 클래스를 성공적으로 구현하고 테스트했습니다. 이제 Python 애플리케이션에서 이 클래스를 사용하여 불변 데이터 구조를 저장할 수 있습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



