반응형
이번에는 번외 프로젝트로 큐를 만들어보도록 하자.
이 프로젝트를 통해 Golang의 채널(chan)이라는 연산자/자료형이 갖는 성질을 터득해볼 수 있다.
소스 코드는 아래와 같다.
우리는 5칸 짜리 큐를 만들고, 1, 2, 3을 차례대로 넣었다가 Pop 시킬 것이다.
// making queue with Go channel
package main
import "fmt"
type Queue struct {
item chan int
}
// save inputs
func (q *Queue) Append(val int) {
q.item <- val
}
// pop inputs
func (q *Queue) Pop() int {
return <-q.item
}
func main() {
q := Queue{item: make(chan int, 5)}
q.Append(1)
q.Append(2)
q.Append(3)
a := q.Pop()
b := q.Pop()
c := q.Pop()
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
당연히 큐의 FIFO 원리를 따라, 결과는 아래와 같다.
1
2
3
Process exiting with code: 0
위와 같이, Golang의 chan 연산자/자료형이 갖는 성질은 넣고 빼는 것과 같다.
이러한 채널을 사용하여 고루틴으로 필요한 데이터를 넣고 뺄 수 있다.
또한, 이러한 채널을 이용하는 결정적인 이유는 close()함수로 채널을 닫을 수 있기 때문이다.
그렇게 메모리 누수를 차단시키고 고루틴을 정상적으로 돌릴 수 있기 때문에, 우리는 Golang의 chan 연산자/자료형에 대해 잘 알고 있어야 한다.
반응형
'IT > 자료구조' 카테고리의 다른 글
[Python] 더블 링크드 리스트 (이중 연결 리스트) (5) | 2019.11.30 |
---|---|
[Python] 싱글 링크드 리스트 (단순 연결 리스트) (10) | 2019.11.29 |