• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

채널과 배열은 전혀 다른 건가요?

22.04.11 00:17 작성 조회수 142

1

뭔가 채널과 배열의 문법만 다르고

결과론적으로는

done <- s 자리에

append 함수를 동작하게 해도

같은 원리인 거 같은데

그거랑 전혀 다른건가요 아니면

좀 더 편리하게 사용할 수 있도록 만들어 둔건가요?

 

답변 2

·

답변을 작성해보세요.

1

hen Cho님의 프로필

hen Cho

2022.04.13

GO루틴 사용에 알맞게 만들어진 배열.. 까지 정도로 일단은 이해하고 더 공부해보다 어려우면 질문드릴께요!

고맙습니다!

1

안녕하세요 hen Cho 수강자님. 질문에 대한 답변 드리겠습니다.

 

먼저, 채널과 배열의 차이에 대해서 질문주셨는데요.

이해하신 내용도 틀린 내용은 아닙니다. 오히려 정확히 핵심을 파악하신 듯 합니다.

 

Go 채널은 Go 루틴간의 통신을 위해 만들어진 구현입니다

채널의 작동원리에 대해 간단히 설명드리며, 배열과의 차이에 대해 말씀드리도록 하겠습니다.

 

ch := make(chan int, 3)

이 make 함수는 프로그래머가 편리하게 사용할 수 있도록 미리 초기화 과정을 진행해줍니다. make 함수는 슬라이스, 맵, 채널에 사용할 수 있는데 배열을 만들 때와는 다르게, 채널을 make할 경우 내부 저장소(heap)에 hchan이라는 구조체를 만들고 이 주소를 반환해줍니다. 그러면 ch에는 hchan의 주소가 저장되게 되고 나중에라도 언제든 찾아갈 수 있습니다.

hchan이라는 구조체는 어떻게 구성이 되어있느냐 하면, '큐'라는 자료구조로 이뤄진 3개의 int 자료형이 들어갈 수 있는 공간이 할당됩니다. 그림으로 간단히 표현해보자면 아래와 같습니다.

이렇게 공간이 할당이 되고 3개의 공간은 "원형 큐"로 버퍼 구현이 됩니다. 이외에도 hchan 부분에 'mutex' 라고 다른 Go 루틴으로부터 접근을 하거나 못하게 하는 제어를 해주는 녀석이나, 현재 큐에서 <- ch를 했을 시 보내야하는 위치 혹은 ch <- 1 을 했을 시 저장해야하는 위치 등등으로 구성이 되어있습니다.

고로, Go루틴이 발생시킬 수 있는 다양한 상황을 효율적으로 컨트롤 할 수 있는 기능들로 만들어져 있는 것이 채널입니다.

유튜브에 유용한 영상이 있어 공유드립니다. (https://youtu.be/KBZlN0izeiY)

조금 깊은 내용이라 혹시나 어려우셨다면, 다시 질문주시면 언제든 답변 드리겠습니다!

감사합니다.