Go언어는 경량 스레드로 동시성 프로그래밍을 지원하는 고루틴이라는 기능을 제공합니다. 이를 통하여 효율적인 병행성을 구현할 수 있습니다. 고루틴의 사용법, 고루틴에 사용되는 뮤텍스, 뮤텍스가 발생시킬 수 있는 데드락에 대하여 알아보겠습니다. 목차 고루틴이란? 뮤텍스란? 데드락이란? 고루틴이란? 고루틴은 경량 스레드로서, Go언어의 주요 특징인 동시성을 지원하는 개념입니다. 고루틴은 하나의 스레드에서 관리되며, 작은 작업 단위로 프로그램을 병행 실행할 수 있습니다. main함수도 고루틴에서 실행되므로 프로그램이 실행되면 적어도 하나의 고루틴을 가지고 시작합니다. 예시 코드 package main import ( "fmt" "sync" "time" ) var wg sync.WaitGroup func twoS..
Go 언어는 강력한 타입 시스템을 가지고 있으며, 인터페이스는 이러한 타입 시스템의 핵심 개념 중 하나입니다. 인터페이스는 코드의 재사용성을 높이고 다형성을 지원하여 유연하고 확장 가능한 코드를 작성하는데 도움을 줍니다. 이러한 인터페이스를 알아보며 덕타이핑과 어댑터를 통하여 인터페이스의 활용방법 등에 대하여 설명해 보겠습니다. 목차 인터페이스란? 어댑터 패턴이란? 인터페이스란? 인터페이스는 메서드의 집합을 정의하는 타입입니다. struct와 달리 필드를 가지지 않고 메서드 시그니처만 포함합니다. struct처럼 interface도 type으로 선언합니다. interface 생성 다른 언어에서도 사용하였던 인터페이스지만 Go언어는 항상 새롭게 느껴집니다. type Shape interface { Area..
지금까지 언어를 배우면서 메서드와 함수를 거의 혼용하여 사용하고 있었습니다. Go를 배우며 함수와 메서드의 차이에 대하여 확실하게 잡게 되어 다행이라고 생각합니다. Go에서는 메서드를 어떻게 선언하는지 알아보겠습니다. 목차 메서드란? 메서드의 함수 표현식 메서드란? 메서드라는 것은 함수를 호출하는 객체가 있는 경우를 메서드라고 합니다. Go언어에서는 class 혹은 object가 없기에 type를 통하여 메서드를 선언할 수 있습니다. Go언어에서 정의한 메서드는 '사용자 정의 타입 값에 호출할 수 있는 특별한 함수'라고 이야기하고 있습니다. 메서드와 함수의 차이 다른 언어에서는 메서드와 함수의 형식이 크게 다르지 않았습니다. 하지만 Go 언어는 메서드는 형식부터가 다릅니다. 메서드 예시 func(리시버)..
쉬운 사람에게는 쉽고 어려운 사람에게는 어려운 Pointer에 대하여 알아보겠습니다. 목차 Pointer란? Pointer 주의사항 Pointer란? Pointer는 메모리 주소라고도 하는데 말 그대로 변수가 저장된 메모리 위치를 나타냅니다. Pointer 선언 num := 30 ptr1 := &num var ptr2 *int = &num var ptr3 *int ptr3 = &num pointer도 값을 나타내기 때문에 변수 선언처럼 선언하면 됩니다. pointer는 주소 값을 저장하는 type이기 때문에 기존의 자료형 앞에 '*'을 사용하여 pointer 자료형이라는 것을 알리고 저장하는 값은 변수의 주소이기 때문에 '&'을 사용하여 변수의 주소 값을 받아옵니다. Pointer 출력 Pointer에 ..