메소드는 일종의 함수 입니다.
메서드는 함수와 동일하지만 리시버
라는 부분에서 차이가 발생합니다.
func (r Rabbit) info() int{
return r.width * r.height;
}
type account struct{
balance int
}
type account2 struct{
balance int
}
func withdrawFunc(a *account, amount int){
a.balance -= amount
}
// 함수
func (a *account) withdrawMethod(amount int){
a.balance -= amount
}
// 메서드
쉽게 말해 메서드는 리시버에 포함되는 개념이라고 생각하면 됩니다.
- 리시버에서만 사용이 가능한?
func main(){
a:= &account{100} //포인터 타입으로 선언
b:= &account2{100}
withdrawFunc(a,30);
a.withdrawMethod(30)
// 메서드이기 떄문에 이런식으로 사용이 가능합니다.
b.withdrawMethod(30)
// 반대로 이 코드는 작동하지 않습니다.
// - 왜냐하면 리시버가 다르기 떄문에
}
굳이 구조체에만 사용하지 않아도 됩니다.
type myInt int
func(m myInt) Add(a int) myint{
rst := int(m) + a
return myInt(rst)
}
주의해야 할점은 메서드의 리시버에 들어가는 타입은 반드시 해당 지역 타입만 사용이 가능합니다.
func(m int) Add(a int) myint{
rst := int(m) + a
return myInt(rst)
}
메서드를 별개로 두면 안되고 그냥 함수로 생각해도 됩니다.!!