3. 컬렉션의 뼈대 (collections.abc)

리스트, 튜플, 딕셔너리, 셋(Set) 등 여러 개의 데이터를 묶어 담는 파이썬의 주머니들을 ‘컬렉션(Collection)’이라고 합니다. 이 컬렉션들도 결국 제멋대로 만들어진 것이 아니라, collections.abc 라는 강력한 가이드라인에 따라 설계되었습니다.

3.1 삼위일체: 컬렉션의 기초 조건

파이썬에서 ‘컬렉션’ 대접을 받으려면 (즉, Collection 추상 클래스가 되려면) 다음 세 가지 기능의 뼈대를 무조건 갖춰야 합니다.

  1. Sized: 얼마나 들어있는지 길이(__len__)를 잴 수 있을 것.
  2. Iterable: 하나씩 차례대로 꺼낼 수(__iter__) 있을 것.
  3. Container: 그 안에 특정 요소가 들어있는지 포함 여부(__contains__)를 검사할 수 있을 것.

3.2 줄 세우기: Sequence 패밀리

문자열(str), 튜플(tuple), 리스트(list)처럼 순서(인덱스)가 있는 자료형들의 부모가 바로 Sequence 추상 클래스입니다. 순서가 있으니 추가로 대괄호에서 인덱스로 찾기(__getitem__)가 가능해야 하죠.

이 중에서 내용물을 수정할 수 있는 리스트(list) 같은 녀석들은 다시금 MutableSequence 라는 상위 클래스를 상속받아 요소를 삭제하거나 삽입하는 강력한 능력을 얻습니다.


3.3 열쇠와 자물쇠: Mapping 패밀리

딕셔너리(dict)처럼 “이름표(Key)”로 데이터를 찾는 자료형들의 부모는 Mapping 추상 클래스입니다. 역시 딕셔너리는 내부의 값을 맘대로 바꿀 수 있으므로 MutableMapping 클래스 아래에 소속되어 있으며, 수정을 담당하는 매직 메서드(__setitem__ 등)를 구현하고 있습니다.


3.4 짝퉁(?) 객체: View 자료형

딕셔너리의 키(dict.keys())나 값(dict.values())을 조회하면 나오는 결과는 리스트가 아닙니다. 이들은 데이터를 복사해서 새로 만든 게 아니라, 원본 데이터베이스에서 그 부분만 들여다볼 수 있는 ‘투명한 유리창(View)’ 역할을 합니다.

파이썬은 이를 위해 KeysView, ValuesView, ItemsView 등의 추상 클래스를 따로 관리합니다. 이런 뷰(View) 형태를 쓰면 매번 덩치가 큰 데이터를 복사할 필요가 없어 컴퓨터 자원을 크게 절약할 수 있습니다.

서브목차