Go기초 4

Go 언어 channel 기초: goroutine 간 통신과 동기화 방법

goroutine의 개념을 이해했다면, 이제 거의 항상 함께 사용되는channel을 다룰 차례다.goroutine이 “동시에 실행되는 작업 단위”라면,channel은 그 작업들 사이를 연결하는 통로에 해당한다.Go에서는 공유 메모리보다 메시지 전달을 우선하는 방식으로 동시성을 설계한다.이 글에서는channel의 기본 개념송수신 방식과 동작 특성실제로 자주 사용하는 패턴을 중심으로 정리한다.channel이란 무엇인가channel은 값을 주고받기 위한 통로다.ch := make(chan int)chan 타입 형태로 선언같은 타입의 값만 송수신 가능goroutine 간에 값을 안전하게 전달하기 위한 수단이며,락(lock)을 직접 다루지 않아도 동기화를 가능하게 해준다.[이미지: Go channel 기본 구조]..

backend 2026.01.17

Go 언어 goroutine과 동시성 기초: 병렬 처리의 기본 단위 이해하기

defer까지 이해했다면, 이제 Go를 선택하는 가장 큰 이유 중 하나인동시성(concurrency) 을 다룰 차례다.Go의 동시성은 복잡한 스레드 제어 대신goroutine과 channel이라는 비교적 단순한 개념을 중심으로 설계되어 있다.문법은 간단하지만, 개념을 제대로 이해하지 않으면 예상치 못한 동작을 만들기 쉽다.이 글에서는goroutine이 무엇인지어떻게 실행되고 관리되는지실제로 써보면서 느끼는 특징을 중심으로 정리한다.goroutine이란 무엇인가goroutine은 Go에서 제공하는 경량 스레드(lightweight thread) 다.go doWork()go 키워드를 붙이면 새로운 goroutine에서 함수가 실행된다함수 호출 자체는 즉시 반환된다이 한 줄로 동시 실행이 가능해진다는 점이Go..

backend 2026.01.16

Go 언어 인터페이스(interface): 느슨한 결합과 다형성 이해하기

구조체와 메서드까지 익혔다면, 이제 Go 설계의 핵심이라고 할 수 있는interface를 이해할 차례다.Go 인터페이스는 다른 언어의 인터페이스나 추상 클래스와 개념적으로 비슷해 보이지만,사용 방식과 철학은 꽤 다르다.특히 “명시적으로 구현하지 않는다”는 점에서 처음 접하면 헷갈리기 쉽다.이 글에서는Go 인터페이스가 무엇인지어떻게 구현되는지실무에서 왜 자주 쓰이는지를 예제와 함께 정리해본다.interface란 무엇인가Go에서 인터페이스는 메서드 집합의 정의다.type Reader interface { Read() string}필드는 없다어떤 메서드를 가져야 하는지만 정의한다이 인터페이스를 구현하려면,해당 메서드를 가진 타입이면 자동으로 인터페이스를 만족한다.명시적인 implements가 없다Go 인..

backend 2026.01.13

Go 언어 구조체와 메서드: 데이터와 동작을 함께 다루는 방법

제어문과 반복문까지 익혔다면, 이제부터는 코드를 어떻게 구조화할 것인가가 중요해진다.Go에서는 이 역할을 구조체(struct) 와 메서드(method) 가 담당한다.객체지향 언어에 익숙한 사람이라면 “클래스가 없는 객체지향”이라는 설명을 자주 접했을 텐데,실제로 Go의 구조체와 메서드를 이해하면 그 표현이 왜 나왔는지 자연스럽게 납득하게 된다.이 글에서는구조체가 어떤 역할을 하는지메서드는 왜 함수와 분리되어 있는지실제로 쓰면서 어떤 패턴이 많이 등장하는지를 중심으로 정리해본다.구조체(struct): 여러 값을 하나의 의미로 묶기구조체는 여러 필드를 하나의 타입으로 묶는 방법이다.type User struct { ID int Name string Age int}type 키워드로 새로운..

backend 2026.01.12