[Go] 채널 Channel 기초
2024. 11. 23. 18:51

1. 채널의 개념

- 채널은 고루틴 간의 데이터 통신을 위해 Go에서 제공하는 도구

- 데이터를 안전하게 주고받기 위해 사용되며, 고루틴 간 동기화 기능도 제공

- 채널은 특정 타입의 데이터를 전달하며, 타입 안정성을 보장


2. 채널의 기본 사용법

채널 선언

var ch chan int  // int 타입의 데이터를 전달하는 채널

채널 생성

ch := make(chan int) // int 타입의 데이터를 전달하는 채널 생성

데이터 송신과 수신

1. 송신: ch <- value

- 채널에 데이터를 보냄

2. 수신: value := <- ch

- 채널로부터 데이터를 받음


3. 채널의 기본 예제

예제: 고루틴 간 데이터 전달

package main

import (
	"fmt"
)

func sender(ch chan int) {
	ch <- 42 // 데이터를 채널로 보냄
}

func main() {
	ch := make(chan int) // 채널 생성

	go sender(ch)        // 고루틴 실행
	value := <-ch        // 채널에서 데이터 수신

	fmt.Println("Received:", value)
}

출력 결과
Received: 42

동작 설명

1. main 함수에서 채널을 생성하고 고루틴(sender)을 실행

2. sender 고루틴에서 42를 채널에 보냄

3. main 함수는 채널로부터 값을 받아 출력


4. 채널의 특징

1. 동기화

- 채널은 송신자와 수신자가 준비될 때까지 대기

- 이는 데이터의 일관성을 보장

2. 타입 안정성

- 선언된 데이터 타입만 전송 가능

3. 블로킹

- 채널에서 데이터를 송신하거나 수신하는 동작은 기본적으로 블로킹 방식

- 즉, 송신자는 수신자가 준비될 때까지 기다림

'프로그래밍 > Go' 카테고리의 다른 글

[Go] 고루틴과 채널이 이해가 힘들때  (0) 2024.11.25
[Go] 채널 Channel 심화  (1) 2024.11.23
[Go] 고루틴 Goroutine  (1) 2024.11.23
[Go] 인터페이스 interface  (0) 2024.11.23
[Go] 구조체 (Struct)  (0) 2024.11.22