[Swift] Sequence

OQ·2022년 3월 21일
0

Swift

목록 보기
3/11
post-thumbnail

Sequence에 대해 간단히 알아봅시다.

Sequence 란?
순차적으로 인자값에 접근하게 해주는 편리한 녀석이라고 합니다.

3, 2, 1 카운트 다운 해주는 녀석을 만들어 봅시다.

struct Countdown: Sequence, IteratorProtocol {
    var count: Int

    mutating func next() -> Int? {
        if count == 0 {
            return nil  // 없으면 무한루프에 빠짐
        }
        
        defer {
            count -= 1
        }
        
        return count
    }
}

이런식으로 Sequence을 따르는 Countdown이란 녀석을 만들어보았습니다.
IteratorProtocol은 Sequence를 만드는데 필수적으로 따라야하는 프로토콜로서
Sequence값을 만드는 팩토리 역할을 수행합니다.

이 녀석을 한번 사용해 봅시다.

let threeTwoOne = Countdown(count: 3)

for count in threeTwoOne {
    print("\(count)...")	// 3.. 2.. 1..
}

이런식으로 for-loop문에 사용할 수 있습니다.
만약 "next()"에서 nil값이 오는 경우가 없다면 무한루프가 되므로 조심하셔야합니다.

for-loop가 된다면 혹시?

print(threeTwoOne.map { $0 * 3 })	// [9, 6, 3]
print(threeTwoOne.filter { $0 / 2 == 0 })	// [1]
print(threeTwoOne.reduce(0){ $0 + $1 })	// 6

이런식으로 Sequence을 따르는 곳에 사용될 수 있는 여러 고차함수에 사용될 수 있습니다.

결론

편리한 기능이긴한데 실 업무에서 사용될 부분이 있을지는 아직 잘 모르겠습니다.
Array나 Dictionary는 Collection 타입을 따르고 Collection은 Sequence을 따르기 때문에 Array나 Dictionary를 쓰는 자료형이라면 기본적으로 Sequence기능을 사용할 수 있습니다.
그 외에 따로 Sequence을 상속하면서 사용할 일이 있을지는 음...
예시로 든 Countdown도 솔직히 "for count in (1...3).reversed()"로 바로 사용하는게 더 가독성 있다고 생각들기도 합니다.
그래도 알고 있으면 언젠가는 쓰지 않겠습니까? 허허 🤔

profile
덕업일치 iOS 개발자

0개의 댓글