Pre-declared Types
go 언어에서 빌드인으로 정의된 데이터 타입들.
string, number(int, uint, float...), boolean 타입들
Named vs Unnamed Type
go언어에서는 사용자 정의(type T_Int int 등)는 기본적으로 named type 으로 인식한다.
그리고 pre-declared types도 named type으로 인식한다.
unnamed type은 composited 타입들로 []int, *int 등을 별도로 인식한다.
named type 들은 메소드 정의가 가능하지만 unnamed type은 메소드를 만들 수 없다.
type Map map[string]string
//this is valid
func (m Map) Set(key string, value string){
m[key] = value
}
//this is invalid
func (m map[string]string) Set(key string, value string){
m[key] = value
}
Underlying Type
모든 타입은 underlying type 을 가집니다. 리터럴과 declared type들은 자신의 타입을 underlying type으로 처리한다.
새로 생성되는 타입들에는 기존의 타입들이 있어야 하고 이 타입들도 항상 underlying type 을 가진다.
type Map map[string]string
type SpecialMap Map
SpecialMap과 Map이 underlying type은 map[string]string 이다.
Assignability
//사용자 정의 타입
type Mystring string
// pre-declared 타입
var str string = "abc"
// 둘다 named type이므로 동일한 타입이 할당되어야 한다.
var my_str MyString = str // error 발생
할당시 에러가 발생하는 것은 named type들끼리 할당시 동일한 타입이 아닐경우는 에러를 발생한다.
// 사용자 타입을 unnamed type으로 지정
type aint [2]int
// 함수의 인자를 사용자 타입의 underlying type으로 지정
func Add(any [2]int) int {
return int(any[0] + any[1])
}
// 사용자 지정 변수를 정의
var aaa aint
// 값을 할당
aaa[0] = 10
aaa[1] = 20
// Add 함수 호출 함수의 인자가 unnamed type이라서 underlying type으로 매칭함
fmt.Println(" ttttt ", Add(aaa))
Type Conversions
var my_str MyString = MyString(str) 로 타입컨버전하여 처리하면 두 타입이 동일하므로 처리가 가능하다.
댓글
댓글 쓰기