티스토리 뷰

반응형

 

 

 

안녕하세요. developer, 멍구입니다. 🤗
오늘은 Sequence protocol, 시퀀스 프로토콜에 대해서 그 특징에 대해서 간략하게 알아보도록 하겠습니다. ^-^//

 


Sequence Protocol
Sequence 프로토콜

자기 자신의 요소 값들이 반복자 접근, 순차적 접근되는 것을 제공하는 타입

 

Declaration of Sequence protocol

Sequence는 protocol로 즉, 하나의 규약으로서 정의되어있습니다. 또한 스위프트 표준 라이브러리에 속해 있습니다.
이어서 개요에 대해 보겠습니다. 

 


 

Overview
개요


Sequence(시퀀스)는 한번에 하나씩 단계적으로 밟아 수행해갈 수 있는 값들의 리스트입니다.

보통 Sequence 내의 값들을 순회하는 가장 보편적인 방법인 for-in 루프를 사용하는 것 입니다. 바꿔 말하면, Sequence 프로토콜을 준수하는 타입은 for-in 루프로 순회할 수 있습니다. 

let numbers = 0...10

for number in numbers {
    // 0 ~ 10이 한줄 한줄 출력됩니다.
    print(number)
}

 

겉보기에 단순해 보일지 모르지만, 이러한 가용성은 어떤 시퀀스 상에서든 많은 양의 연산을 위해 접근하는 것을 지원합니다.

예를 들면, Sequence 내에 특정 값이 포함되어있는지 확인할때, Sequence의 끝에 도달하거나, 특정 값을 찾을 때까지 순차적으로 탐색하고 테스트할 수 있습니다.

아래의 코드는 특정 과일의 이름이 fruits 배열 안에 포함되어있는지를 확인하는 예시입니다. 

let fruits = ["apple", "banana", "grape", "melon", "strawberry"]
let melon = "melon"
var hasMelon = false

for fruit in fruits {
    if fruit == melon {
        hasMelon = true
        break
    }
}

print("Yes, there is a \(melon)")

 

 

Sequence 프로토콜은 값들에 대한 순차적(Sequential)접근을 기반으로 하는 공통 연산 작업에 대한 기본적인 기능들을 다수 제공합니다. 더 명확하고 간결하게 보자면, 아래의 예시는 특정 값을 Sequence 상에서 특정 요소(Element)를 찾는데 사용하는 contains(_:) 메서드를 사용하고 있습니다.

Sequence 프로토콜을 준수하는 타입에서 contains(_:) 메서드를 사용하면 수동으로 값을 순회할 필요 없이 값의 포함 유무를 판단할 수 있습니다. 

contains(_:) 메서드는 Sequence 프로토콜을 준수하는 모든 타입에서 사용이 가능합니다. 
let fruits = ["apple", "banana", "grape", "melon", "strawberry"]
let melon = "melon"

if fruits.contains(melon) {
    print("Yes, there is a \(melon)")
}

 


Repeated Access
반복 접근

 

let fruits = ["apple", "banana", "grape", "melon", "strawberry"]
let melon = "melon"

for fruit in fruits {
    if fruit == melon { break }
}

for fruit in fruits {
    // 정의 되지 않은 행동
}


이런 케이스에서, 순회탐색을 할때 해당 Sequence가 반드시 사용되거나, 반복 순회를 단연 재개할거라고 생각하시면 안됩니다. 또한 해당 Sequence가 파괴적이지 않은 반복순회를 할 수 있는 Collection이고, 맨 처음 값부터 반복순회를 시작할거라고 단정 지어서도 안됩니다.

컬렉션이 아닌 시퀀스의 경우 두번째 for-in 루프에서 임의적인 시퀀스를 생산할 수도 있습니다.

도중에 빠져나오지 않는 파괴적이지 않은 반복순회를 만들기 위해서는, Sequence 프로토콜 뿐만아니라 Collection 프로토콜 또한 준수해야합니다. 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함