PHpullh
학습 라이브러리/Go/비교 연산과 comparable

GO · 기초 문법

비교 연산과 comparable

Go에서 비교 가능한 타입과 불가능한 타입을 이해합니다. comparable 제약은 맵 키와 제네릭에서 중요합니다.

기초 문법중급comparableequalitymap-keygenerics

핵심 설명

Go에서 비교 가능한 타입과 불가능한 타입을 이해합니다. comparable 제약은 맵 키와 제네릭에서 중요합니다.

Go code

package main

import "fmt"

// comparable 제약: == 연산 가능한 타입만 허용
func contains[T comparable](slice []T, target T) bool {
	for _, v := range slice {
		if v == target {
			return true
		}
	}
	return false
}

func main() {
	// 비교 가능: 숫자, 문자열, bool, 포인터, 채널, 배열
	fmt.Println(contains([]int{1, 2, 3}, 2))       // true
	fmt.Println(contains([]string{"a", "b"}, "c"))  // false

	// 구조체도 모든 필드가 comparable이면 비교 가능
	type Point struct{ X, Y int }
	fmt.Println(Point{1, 2} == Point{1, 2}) // true

	// 슬라이스, 맵, 함수는 비교 불가
	// []int{1} == []int{1} // 컴파일 에러
}

학습 팁

맵의 키 타입은 반드시 비교 가능해야 합니다. 구조체를 맵 키로 사용하려면 모든 필드가 comparable이어야 합니다.

주의할 점

슬라이스, 맵, 함수 타입은 ==로 비교할 수 없습니다. nil과의 비교만 허용됩니다.

자주 묻는 질문

비교 연산과 comparable란 무엇인가요?

Go에서 비교 가능한 타입과 불가능한 타입을 이해합니다. comparable 제약은 맵 키와 제네릭에서 중요합니다.

비교 연산과 comparable 학습 시 주의할 점은 무엇인가요?

슬라이스, 맵, 함수 타입은 == 로 비교할 수 없습니다. nil 과의 비교만 허용됩니다.