SqueakByExample:10.1

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

두 요소에 대한 순서(sequences)

Stream 을 이해하는 데에 쓰이는 다음과 같은 유용한 비유가 있습니다: Stream 2 개의 구성요소의 나열이라고 할 수 있습니다: 이 2 개의 요소는 이전순서에 해당하는 요소와 다음순서에 해당하는 요소를 말합니다. 이런 모델에 대한 이해는 대단히 중요한데, 왜냐하면 스몰토크에서 모든 Stream 연산은 이 모델을 기본으로 하고있기 때문입니다. 이때문에 대부분의 Stream 클래스들은 PositionableStream 의 서브클래스가 됩니다. 그림 10.1 은 5 개의 Chracter 를 포함하고 있는 Stream 을 보여주고 있습니다. 이경우, Stream 은 처음의 위치에 있으며 이전요소는 가지고 있지 않습니다(stream 내의 position을 의미합니다). 사용자는 reset 이라는 메시지를 사용해서 이 위치를 초기화 시킬 수 있습니다.

그림 10.1: 시작 시점에, 위치를 잡은 stream


요소를 읽는다 라는 행동을 개념적으로 본다면, 다음순서 요소를 떼어낸다음 그걸 이전요소의 뒷부분에 붙인다는것을 말합니다[1].

next 메시지를 사용해서 하나의 구성요소를 읽은 후, Stream 의 상태는 그림 10.2 처럼 변경됩니다.

그림 10.2: 그림 10.1 의 stream 에 next 메시지를 송신한 다음의 상태. chracter a 는 이전에 속하지만 b, c, d, e 는 다음에 속하게 된다.


요소를 작성write 한다는 것은, 현재 위치에 대한 다음 시퀀스의 앞쪽에 새로운 요소를 교대시키고, 이전 요소의 위치로 새로 바뀐 요소를 이동시킨다는 의미가 됩니다. 그림 10.3 은 메시지 nextPut:anElement 를 사용하여 x 를 작성write한 이후의 stream 의 상태를 보여주고 있습니다.

그림 10.3: x 를 write 작업한 이후의 stream


Notes

  1. 지금 현재의 position을 기준으로 다음의 element 를 가져와서 이전 element 의 뒤쪽으로 결합한다는 의미입니다. 결국 1:4 인 배열을 2:3 으로 바꾼다라는 의미가 되겠습니다.