Golang Generics와 Union 타입 이해하기 – 코드 예제와 함께

소개

Golang의 Generics는 Go 1.18 버전 이후에 도입되어 정적 타입 언어의 유연성을 크게 향상시켰습니다. 이 글에서는 Generics, 특히 Union 타입에 중점을 두고 상세한 설명과 실제 코드 예제를 제공합니다.


Union 타입이란 무엇인가?

Union 타입은 서로 다른 타입의 값을 하나의 데이터 타입 내에 저장할 수 있게 해주는 타입입니다. 이를 통해 유연성이 향상되고 코드가 더 견고해지며 재사용성이 높아집니다. Union 타입의 기본 개념을 살펴보고 몇 가지 기본 코드 예제를 살펴보겠습니다.

package main

import "fmt"

type Union struct {
    i int
    s string
}

func main() {
    u1 := Union{i: 42}
    u2 := Union{s: "안녕, 세계!"}

    fmt.Println(u1.i) // 42
    fmt.Println(u2.s) // 안녕, 세계!
}

이 예제에서는 Union 타입을 사용하여 정수 및 문자열 타입의 값을 저장합니다. 이로써 다른 타입의 값을 동일한 변수에 저장할 수 있게 됩니다.


Generics와 Union 타입 결합

Generics를 사용하면 Union 타입을 더 편리하게 사용할 수 있습니다. Generics를 사용하여 Union 타입을 정의하고 서로 다른 타입의 값을 안전하게 저장하는 코드 예제를 살펴보겠습니다.

package main

import "fmt"

type Union[T any] struct {
    value T
}

func main() {
    u1 := Union[int]{value: 42}
    u2 := Union[string]{value: "안녕, 세계!"}

    fmt.Println(u1.value) // 42
    fmt.Println(u2.value) // 안녕, 세계!
}

이 예제에서 Generics를 사용하여 Union 타입을 보다 일반적인 타입으로 정의하여 서로 다른 타입의 값을 안전하게 저장할 수 있게 되었습니다.


코드 예제의 다양성

또한, 다양한 상황에서 Generics와 Union 타입의 다양한 코드 예제를 살펴보겠습니다.

인터페이스로서의 Union 타입 사용

package main

import "fmt"

type Union[T any] struct {
    value T
}

func printValue(u Union[interface{}]) {
    fmt.Println(u.value)
}

func main() {
    u1 := Union[int]{value: 42}
    u2 := Union[string]{value: "안녕, 세계!"}

    printValue(u1) // 42
    printValue(u2) // 안녕, 세계!
}

슬라이스 내의 Union 타입

package main

import "fmt"

type Union[T any] struct {
    value T
}

func main() {
    unions := []Union[interface{}]{
        {value: 42},
        {value: "안녕, 세계!"},
    }

    for _, u := range unions {
        fmt.Println(u.value)
    }
}

이러한 코드 예제는 다양한 상황에서 Generics와 Union 타입을 활용하여 코드의 효율성과 견고성을 향상시킬 수 있음을 보여줍니다.

결론

Golang의 Generics와 Union 타입은 유연성, 견고성 및 코드 재사용성을 향상시키기 위한 강력한 도구를 제공합니다. 이 글에서는 기본 개념을 다루고 실제 코드 예제를 제공했습니다. 이러한 기능을 활용하여 코드의 효율성을 향상시키십시오.

タイトルとURLをコピーしました