[Go 공식문서 한국어 정리] ⑯33. Go 제네릭스 시작하기
https://go.dev/doc/tutorial/generics
[Go 공식문서 한국어 정리] ⑯33. Go 제네릭스 시작하기
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 서론
이 튜토리얼은 Go의 제네릭스의 기본을 소개합니다. 제네릭스를 사용하면 함수나 타입을 여러 타입에 대해 작성할 수 있습니다.
2. 핵심 개념
• 제네릭스는 Go 1.18부터 지원됩니다.
• 타입 매개변수(type parameter): 함수의 일반 인자와 별도로 타입을 지정할 수 있는 매개변수.
• 타입 제약조건(type constraint): 타입 매개변수가 받을 수 있는 타입의 범위를 정의.
• 타입 인자(type argument): 제네릭함수를 호출할 때 전달하는 구체적인 타입.
• 타입 추론: 컴파일러가 타입 인자를 자동으로 결정할 수 있습니다.
3. 주요 내용 상세
3.1 제네릭 함수 선언
• 타입 매개변수는 대괄호 []내에 선언합니다.
• 예: func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V
• K는 comparable 제약을 가짐(매픅 키로 사용)
• V는 int64 | float64 유니온을 가짐
• |는 유니온 타입으로 여러 타입을 포함할 수 있습니다.
3.2 comparable 제약
• comparable은 Go에서 미리 선언된 제약입니다.
• ==, != 연산자를 사용할 수 있는 타입을 허용합니다.
• 매픅 키는 comparable이어야 합니다.
3.3 타입 인자 생략
• 함수 인자의 타입으로부터 컴파일러가 인자를 추론할 수 있습니다.
• SumIntsOrFloats(ints)로 호출하면 컴파일러가 string, int64을 자동으로 추론.
• 인자가 없는 함수를 호출할 때는 인자를 명시적으로 지정해야 합니다.
3.4 제약을 인터페이스로 정의
• 제약을 인터페이스로 정의하면 재사용이 가능합니다.
• type Number interface { int64 | float64 }
• 이제 SumNumbers[K comparable, V Number]로 사용할 수 있습니다.
4. 실전 활용
• 제네릭스를 사용하면 중복을 줄이고 유연한 코드를 작성할 수 있습니다.
• 매픅, 슬라이스, 채널에 적용할 수 있는 제네릭 함수를 작성합니다.
• 타입 제약을 사용해 허용되는 타입의 범위를 명확히 정의합니다.
• 타입 인자를 생략하면 컴파일러가 추론하도록 하십시오.
5. 정리
• Go 1.18부터 제네릭스를 사용할 수 있습니다.
• 타입 매개변수를 사용해 함수나 타입을 일반화할 수 있습니다.
• 제약조건은 comparable, 유니온 타입, 또는 사용자 정의 인터페이스를 사용할 수 있습니다.
• 타입 인자를 생략하면 컴파일러가 자동으로 추론합니다.
#Go #Golang #Generics #제네릭스 #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30