[go] Sort 패키지의 타입 변환

Go 언어에서 sort 패키지는 슬라이스를 정렬하는 기능을 제공합니다. 때때로 정렬에 사용되는 타입이 슬라이스 내의 원소들과 다를 수 있습니다. 이런 경우에는 타입을 변환해야 합니다.

이번 글에서는 sort 패키지를 사용할 때 발생할 수 있는 다양한 타입 변환에 대해 알아보겠습니다.

1. 타입 변환

슬라이스의 원소들은 보통 정렬 가능한 타입이어야 합니다. 그러나 때로는 슬라이스의 원소들이 정렬되어야 하는 타입과 일치하지 않을 수 있습니다. 이럴 때에는 타입 변환을 사용하여 원하는 타입으로 변환할 수 있습니다.

예를 들어, 정수 슬라이스를 정렬할 필요가 있을 때가 있습니다. 그럴 때는 sort.IntSlice를 사용하여 원하는 타입으로 변환할 수 있습니다.

ints := []int{4, 2, 1, 3}
sort.Sort(sort.IntSlice(ints))

2. 사용자 정의 타입의 변환

사용자가 정의한 타입을 정렬하기 위해서는 해당 타입에 Len, Less, Swap 메서드를 구현해야 합니다. 그 후, 해당 타입을 sort.Sort 함수에 전달하여 정렬할 수 있습니다.

예를 들어, 사용자가 정의한 Person 구조체를 나이를 기준으로 정렬하고 싶다면 다음과 같이 사용자 정의 타입을 변환하여 정렬할 수 있습니다.

type Person struct {
    Name string
    Age  int
}

type ByAge []Person

func (p ByAge) Len() int           { return len(p) }
func (p ByAge) Less(i, j int) bool { return p[i].Age < p[j].Age }
func (p ByAge) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }

people := []Person{
    {"Alice", 25},
    {"Bob", 30},
    {"Charlie", 20},
}

sort.Sort(ByAge(people))

결론

Go 언어의 sort 패키지를 사용할 때에는 다양한 타입 변환을 활용하여 슬라이스를 정렬할 수 있습니다. 필요에 따라서는 사용자 정의 타입을 통해서도 슬라이스를 정렬할 수 있으며, 이러한 유연성은 Go 언어의 강력한 기능 중 하나입니다.

위의 예제 코드를 보고 싶다면 여기를 참고하세요.