유래
파이프라인은 한 곳에서 다른 곳으로 액체를 옮기기 위해 사용한 파이프들의 집합을 말한다. 컴퓨터에서 말하는 파이프라인 역시 이와 마찬가지로 어떤 위치에서 다른 위치로 데이터를 처리 후 운반하기에 이와 같은 용어를 사용하는 것으로 보인다.
파이프라인이란?
시스템에서 추상화를 구성하는 데 사용할 수 있는 도구이다. 특히 Stream이나 Batch 작업들을 처리해야 할 때에는 특히 탁월한 효과를 낸다.
각 단계의 관심사를 분리할 수 있다. 그로써 다양한 이점을 얻을 수 있다.
1. 상호 독립적으로 단계를 수정할 수 있다.
2. 단계들의 결합 방식을 짜맞출 수 있다.
3. 일부분을 팬 아웃하거나 속도를 제한할 수 있다.
파이프라인의 특성
1. 각 단계는 동일한 타입을 소비하고 리턴한다.
2. 각 단계에서 함수의 매개변수로 함수가 사용될 수 있어야 한다.
먼저 파이프라인을 사용하지 않은 우리에게 익숙한 코드를 살펴보자.
ints := []int{1, 2, 3, 4}
for _, v := range ints {
fmt.Println(2*v + 1)
}
단순한 반복문의 익숙한 함수이다.
우리는 이 방법이 훨씬 간단해 보이지만 이전에 언급했던 파이프라인을 사용함으로써 얻을 수 있는 장점들을 얻을 수 없다.
파이프라인을 사용한 간단한 예시 코드이다.
func Exam1() {
multiply := func(values []int, multiplier int) []int {
multipliedValues := make([]int, len(values))
for i, v := range values {
multipliedValues[i] = v * multiplier
}
return multipliedValues
}
add := func(values []int, additive int) []int {
addedValues := make([]int, len(values))
for i, v := range values {
addedValues[i] = v + additive
}
return addedValues
}
ints := []int{1, 2, 3, 4}
for _, v := range add(multiply(ints, 2), 1) {
fmt.Println(v)
}
}
실행결과
3
5
7
9
'Study > Go' 카테고리의 다른 글
[Go] Context 패키지 알고쓰기 (0) | 2022.08.17 |
---|---|
[Go] GC(Garbage Collection) 심화 (0) | 2022.08.05 |
[Go] 고루틴(GoRoutine) 심화(6) - 고루틴 에러 처리 (0) | 2022.06.20 |
[Go] 고루틴(GoRoutine) 심화(5) - 누수 관리 (0) | 2022.05.24 |
[Go] 고루틴(GoRoutine) 심화(4) - channel (0) | 2022.05.15 |