Go Language

[Go] #22 패키지의 개념
컬렉션을 시작으로 인터페이스까지 코드의 효율성, 재사용을 위해 끝없이 묶는(모듈화) 연습을 했다. 변수들을 묶은 컬렉션, 객체 정보를 묶은 메소드, 기능을 묶은 함수, 메소드를 묶은 인터페이스들을 학습하면서 더 이상 없다고 생각했지만 이 모든 것을 묶은 '패키지'가 있다. 이렇게 한 파일로 작성된 패키지인 컴포넌트는 코드의 모듈화, 코드의 재사용을 가능하게 한다. 이미 우리는 코드 상단에 import "fmt" 라고 습관적으로 입력하면서 수 없이 써왔다. 이것은 우리가 기능을 만들고 구현하지 않아도 누군가 만들어놓은 코드를 재사용한다는 것을 의미한다. 패키지는 두 종류가 있다. 바로 main 패키지와 그 외 패키지이다. main 패키지를 제외한 모든 패키지는 개발자가 직접 작성하든 Go언어에서 제공하는 ..
[Go] #21-6 채널(Channel) - 채널 select
이번 강의에서 배울 채널에서의 select문은 '분기문' 챕터에서 학습한 switch문과 거의 흡사한 용법으로 사용된다. switch문은 어떠한 조건이 주어졌을 때, 그 조건에 맞는 부분을 실행한다. 쉽게 말해서, 실행 흐름을 제어하는 것이다. switch문을 학습한지 오래되어 기억하지 못한다면 아래 코드를 확인해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package main import "fmt" func main() { num := 3 switch num { case 1: fmt.Println("1") case 2: fmt.Println("2") case 3: fmt.Println("3") default: fmt.Println("Nothing") } } ..

[Go] #21-5 채널(Channel) - 송신 전용, 수신 전용 채널
지금까지 채널에 대해 학습할 때 단방향 송/수신만 예시로 실행해봤다. 예를 들어, 채널에 데이터를 송신하는 루틴은 송신만, 채널에서 데이터를 수신하는 루틴은 수신만 했다. 그런데 사실 특별한 선언이 없으면 채널은 송신과 수신에 있어 자유롭다. 송신을 하고 이후에 수신도 할 수 있고, 다른 루틴에서도 수신을 하고 이후에 송신도 할 수 있는 것이다. 아래 지금까지 배운 것에서 크게 벗어나지 않는 채널의 예시 코드를 확인해보자. 참고로 채널을 함수의 매개변수로 전달할 때는 "(매개변수이름 chan 채널데이터타입)" 형태로 입력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package main ..
[Go] #21-4 채널(Channel) - 채널 닫기
루틴에서 채널을 생성하고 데이터를 송신하기 위해서는 수신하는 곳이 명확해야 한다. 동기 채널에서는 수신 루틴(다른 루틴이어야 함)에서, 비동기 채널에서는 버퍼에서 데이터를 수신한다. 만약 수신하는 곳이 명확하지 않은 채 채널로 데이터를 송신한다면 채널에 묶여 무한 대기 상황이 발생한다. 메인 루틴에서 무한 대기 상황이 발생하면 데드락이 발생한다. 데이터 수신시에도 마찬가지로 송신된 데이터가 없을 경우에 채널에서 데이터를 수신하면 무한 대기 상태가 된다. 그런데 이때 채널에 데이터를 송신한 후 채널을 닫으면 해당 채널로는 더 이상 데이터를 송신할 수 없지만 채널이 닫힌 후에 계속 수신이 가능하게 된다. 채널을 닫을 때는 "close(채널이름)" 형식을 사용한다. 아래 첫 번째 예시 코드는 송신자보다 수신자..

[Go] #21-3 채널(Channel) - 동기 채널
동기 채널은 이름만 보아도 알 수 있듯이 비동기 채널과 상반되는 개념이다. 원래는 동기 채널이 채널의 기본 형태지만, 비동기 채널과 버퍼의 사용을 먼저 학습하고 그 차이를 분명하게 느끼면 동기 채널에 대한 개념이 확실해질 것 같아 순서를 바꿔서 설명하게 됐다. Go 채널의 기본을 학습할 때 한 개의 송신자와 한 개의 수신자가 채널을 통해 데이터를 주고 받았다. 이때, 수신자와 송신자가 일대일 대응을 하지 않으면 한 쪽에서 무한 대기 상태가 된다고 했다. 그래서 수신자와 송신자가 여러개일 때 효율적으로 데이터를 주고 받는 방법으로 비동기 채널에서 버퍼 사용에 관해 배웠다. 동기 채널은 단순히 송/수신 채널이 여러 개여서 송신 루틴과 수신 루틴이 번갈아가면서 실행되는 것을 말한다. 채널의 기본 개념에서 벗어..

[Go] #21-2 채널(Channel) - 비동기 채널과 버퍼
이전 강의에서 채널은 고루틴간의 데이터 송/수신을 위해 존재하는 것이기 때문에 채널을 사용하기 위해서는 고루틴을 꼭 사용해야한다고 했다. 채널에서는 데이터 송/수신의 역할을 하는 송신자와 수신자가 있다. 송신자는 채널에 데이터를 보내는 역할을 하고(채널