본문 바로가기

IT/자료구조

[Golang] 채널로 큐(Queue)를 만들어보자!

반응형

이번에는 번외 프로젝트로 큐를 만들어보도록 하자.

 

이 프로젝트를 통해 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 연산자/자료형에 대해 잘 알고 있어야 한다.

반응형