Go의 Set 관용구
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 31번째.
Go는 다른 많은 프로그래밍 언어와 달리 내장된 set 데이터 구조를 제공하지 않습니다. 하지만 Go 개발자들은 map을 사용하여 set을 구현하는 우아한 해결책을 만들어냈으며, 이 패턴은 매우 보편화되어 관용적인 Go(idiomatic Go) 방식으로 여겨집니다.
Go의 set 이디엄은 값(value)이 아닌 키(key)에만 관심이 있는 맵(map)을 사용합니다. 값으로 무언가를 저장해야 하기 때문에, Go 프로그래머들은 빈 구조체인 struct{}를 사용합니다. 기본적인 패턴은 다음과 같습니다:
var mySet map[string]struct{}빈 구조체 struct{}는 메모리를 0바이트 차지하기 때문에 특별합니다. 이는 의미 없는 값에 메모리를 낭비하지 않고 무언가가 존재하는지 여부만 추적하면 되는 집합(set)에 사용하기에 완벽합니다.
이 접근 방식은 맵 키(map keys)의 근본적인 속성인 유일성을 활용합니다. 세트(set)에 항목을 추가할 때, 실제로는 맵에 키를 추가하는 것입니다. 유일성은 맵의 동작에 의해 자동으로 보장되며, 진정한 세트 의미론(set semantics)을 제공합니다.
앞으로의 레슨에서, 여러분은 이 관용적인 Go 패턴을 사용하여 세트를 생성하고, 조작하고, 다루는 방법을 배우게 될 것입니다. 이 기법은 고유한 항목을 추적하고, 알고리즘을 구현하며, 빠른 멤버십 테스트가 필요한 문제를 해결하기 위해 Go 코드베이스에서 널리 사용됩니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
치트 시트
Go에는 내장된 세트(set) 데이터 구조가 없지만, 다음과 같은 관용적인 패턴을 사용하여 맵(map)으로 세트를 시뮬레이션합니다:
var mySet map[string]struct{}빈 구조체 struct{}는 메모리를 0바이트 차지하기 때문에 값 타입으로 사용됩니다. 맵의 키는 고유해야 하므로, 고유한 항목을 추적하기 위한 세트 의미론(set semantics)을 자동으로 제공합니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.