Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 추상 팩토리
- Functional Programming
- 코틀린
- Coroutines
- Singleton
- Observer Pattern
- 디자인패턴
- designPattern
- 안드로이드 디자인시스템
- material3
- PrototypePattern
- 프로토타입 패턴
- 싱글톤
- builderPattern
- compose
- 코루틴
- factory method
- Kotlin
- android designsystem
- Abstract Factory
- 빌터패턴
- 함수형프로그래밍
- define
- Design Pattern
- 디자인패턴 #
- 팩토리 메소드
- 추상팩토리패턴
- ㅋㅁ
- ㅓ
- 옵저버 패턴
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
2장 시퀀스 빌더 본문
코틀린의 sequence List, Set과 같은 컬렉션이랑 비슷한 개념이지만, 필요할 때마다 값을 하나씩 계산하는 지연(lazy) 처리를 한다.
- 요구되는 연산을 최소한으로 수행한다.
- 무한정이 될 수 있다.
- 메모리 사용이 효율적이다.
val seq = sequence { // this : SequenceScope<Int>
yield(1)
yield(2)
yield(3)
}
fun main() {
for (num in seq) {
print(num)
}
}
수신 객체 지정 람다 함수 사용 ( susepnd SequenceScope<T>.() -> Unit )
숫자가 미리 생성되는 대신 필요할 때마다 생성된다는 것이 핵심이다.
시퀀스의 작동방식
val seq = sequence {
println("Generating First")
yield(1)
println("Generating Second")
yield(2)
println("Generating Third")
yield(3)
println("Done!")
}
fun main() {
for (num in seq) {
println("Next Number : $num")
}
}
1. sequence 빌더 에서 Generating First를 출력후 숫자1을 반환(yield)
sequence 중단
2. Next number is 1을 출력
sequence 중단된 지점에서 다시 시작
3. sequence 빌더 에서 Generating Second를 출력후 숫자2을 반환(yield)
sequence 중단
4. Next number is 2을 출력
sequence 중단된 지점에서 다시 시작
5. sequence 빌더 에서 Generating Third를 출력후 숫자3을 반환(yield)
sequence 중단
6. Next number is 3을 출력
7. hasNext
sequence 중단된 지점에서 다시 시작
Done!출력
일부 값만 요청해서 출력해보기.

어떤 지점이든 상관없이 이터레이터를 호출하면 빌더 함수에서 멈췄던 지점으로 다시 돌아가 다음 값을 가져온다.
*sequence 빌더는 반환(yield)이 아닌 중단함수를 사용하면 안된다.
