brunch

You can make anything
by writing

C.S.Lewis

by 내가 사는 세상 Jan 13. 2024

개체지향 - Iterable 개체, Iterator개체

목차

1. iterable 개체 - iterator 개체 관계

2. iterator 개체의 필요성

3. iterator 개체iterable 개체이기도 하다.




1. iterable 개체 - iterator 개체 관계


 iterable 개체는 그 속의 구성원들이 반복 가능한 형태로 되어있다. 문자열, 리스트, 튜플이 대표적이다. 파이썬에서는 모든 것이 개체이다. 그래서 각각을 문자열 개체, 리스트 개체, 튜플 개체라고 부르는 것이 좀더 정확하다. 이들이 개체(인스턴스)라고 불리는 것은 클래스로부터 탄생했다는 출생의 비밀이 있기 때문이다. 그리고 해당 클래스들은 모두 __iter__라는 스페셜 멤버함수를 가지고 있다.


문자열


리스트


튜플




 iterable 개체를 변신시켜 보자. '__iter__ 함수 = iter()'를 사용하여, iterator 개체로 만들어낼 수 있다. 






2. iterator의 필요성


얻어낸 iterator 개체를 살펴보자. 해당 개체는 __next__() 라는 스페셜 멤버함수를 가진다.


이를 통해 개체 속 구성원들을 원하는 시기에 꺼낼 수 있다. iterable 개체는 뽑으면 한번에 다 뽑아야 하지만, iterator 개체는 뽑는 과정이 좀더 자유로워진 것이다.



여기서 next(iterator)는 iterator.__next__()와 같은 표현이다. 이들은 스페셜 멤버함수라고 불리는데, 파이썬 인터프리터에 의해 호출되는 함수를 말한다.(스페셜 멤버함수에 관한 더 자세한 내용


 정리해보자. iterable 개체iterator 개체는 __next__()의 유무로 구분한다.

iterable 개체 : __next__() 없음

iterator 개체 : __next__() 있음




iterator 개체iterable 개체이기도 하다.


 엇. 잠깐.. 그런데 iterator 개체의 스페셜 멤버함수 중에 __iter__가 보인다. 그래서 iterator 개체는 iterable 개체이기도 하다. iterable 개체를 '__iter__ 함수를 가진 개체'라고 정의한다면, iterator에도 iter 함수가 들어있어 iterable이 될 수 있는 것이다. 이미 iterator가 된 놈에 또다시 iter() 함수를 실행하면 iterator가 된다.



 구체적 예시를 보자. for문(반복문)에는 iterable이 와야한다. 문자열 개체, 리스트 개체, 튜플 개체가 와도 됨은, 이들이 모두 iterable 개체이므로 당연하다. 뿐만 아니라 iterator 개체도 iter라는 함수를 가지고 있으므로, iterable이기도 하다. 그래서 iterator 개체도 반복문에 위치할 수 있다. 한마디로 정리하면 iterable 개체와 iterator 개체 모두 __iter__를 가지고 있기 때문에, 반복문의 반복대상이 될 수 있다.




참고자료


열혈 파이썬 중급편(윤성우)

매거진의 이전글 소프트웨어 공학 목차
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari