Golang - 메서드

Lumi·2022년 2월 11일
0

Golang

목록 보기
15/38
post-thumbnail

🔥 메서드

메소드는 일종의 함수 입니다.

메서드는 함수와 동일하지만 리시버 라는 부분에서 차이가 발생합니다.

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)
}
  • 이거는 안됩니다.
  • int라는 타입은 지역타입이 아니기 떄문에

메서드를 별개로 두면 안되고 그냥 함수로 생각해도 됩니다.!!

  • 동작 방식 또한 함수와 같습니다.
profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글