1. 들어가며 Go는 goroutine(고루틴)이라는 독특한 방식으로 동시성을 관리합니다. 고루틴이라는 용어를 보면 가장 먼저 떠오르는 건 역시 코루틴이 아닐까 합니다. C# unity에서 다루는 코루틴이나, Kotlin에서도 자주 사용하는 coroutine 등 다른 언어에서도 흔히 볼 수 있는 기술입니다. 고루틴은 이들과 유사하면서도 차이점이 있습니다. 구체적인 차이점은 추후에 살펴보도록 하고 Go에서 동시성을 어떻게 관리하는지, 고루틴이란 무엇인지 살펴보도록 하겠습니다. 2. Go에서의 동시성 관리우선 고루틴을 이해하기에 앞서 Go에서의 동시성이 OS 스레드와 CPU 코어와 함께 어떤 방식으로 실행되는지 그림과 함께 살펴보겠습니다. 운영 체제는 스레드가 물리적 프로세서에 대해 실행되도록 예약하고 G..
1. 들어가며 Go는 정적 타입 프로그래밍 언어입니다. 개인적으로 동적 프로그래밍 언어에 대해서 python과 Javascript로 프로젝트를 진행해본 경험으로는 규모가 커질수록 유지 보수가 까다로워진다는 인상을 받았습니다. 그런 점에서 Go의 정적 타입이 반가웠던 기억이 있습니다. 그리고 Go에도 인터페이스가 있습니다. 개인적으로 몹시 좋아하는 기능인만큼 반가웠는데, 그 생김새는 사뭇 다릅니다. 그리고 상속이 없습니다. 그 대신 인터페이스, 타입 임베딩 등을 제공하고 있습니다. 그럼 Go의 타입 시스템, 인터페이스, 타입 임베딩은 어떠한지 파헤쳐보도록 하겠습니다. 2. 사용자 정의 타입 Go는 정적 타입 프로그래밍 언어인만큼 컴파일러가 프로그램의 모든 값에 대한 타입을 알고자 합니다. 따라서 타입 오류..
1. 들어가며 Go에는 크게 세 가지 데이터 구조체가 있습니다. array, slice, map이 그것입니다. Java에 익숙하다면 Array와 Map은 많이 보았겠지만 slice는 낯설 것이라 생각합니다 :) 또한 이러한 자료형들은 구체적으로 어떻게 구현되어 있는지 살펴볼 일이 많지 않습니다. 오늘은 구체적인 구현과 주의해야할 사항까지 자세히 정리해보도록 하겠습니다 :) 2. Arrays (배열) 배열: 동일한 유형의 요소의 연속 블록을 포함하는 고정 길이 데이터 유형입니다. 이는 정수, 문자열, 구조체 모두가 가능합니다. Go의 배열은 여타 언어처럼 메모리가 순차적으로 할당되기 때문에 캐시에 유리하며 빠른 반복을 수행할 수 있습니다. 또한 각 요소는 동일한 유형으로 순차적으로 따라가기 때문에 일관..
1. 들어가며 Go에 대해서 반년 전에 간단하게 문법을 포스팅한 적이 있었는데요. 이번에 사이드 프로젝트로 채팅 서버를 golang으로 구현하기로 했고, 그 김에 Go를 조금 더 깊게, 공부하고자 합니다.제가 선택한 책은 Go in Action입니다. Kotlin in Action이 읽고 좋았던 기억이 있고, 학교 도서관에서 온라인 도서를 이용할 수 있게 제공해주었기 때문입니다 :) 영어 원서만 있다는 점도 블로그 글로 포스팅하면 다른 분들께 도움이 될 것 같다는 것이 한몫했습니다.Go in Action을 기반으로 궁금했던 점을 더 조사해나가면서 하나씩 정리해보겠습니다. 2. Go란?Go는 2009년 11월에 처음 발표되고 2012년 3월에 정식 발표된 프로그래밍 언어입니다! Java가 1995년 처음 ..