728x90
1. Go 메소드(Method)
- 메소드는 특별한 형태의 func 함수
- 메소드는 함수 정의에서 func 키워드와 함수명 사이에 "그 함수가 어떤 struct를 위한 메소드인지"를 표시한다.
- receiver부분에 메소드가 속한 struct 타입과 struct 변수명을 지정한다.(struct 변수명은 함수 내에서 마치 입력 파라미터처럼 사용된다.)
package main
//Rect - struct 정의
type Rect struct {
width, height int
}
//Rect의 area() 메소드
func (r Rect) area() int {
return r.width * r.height
}
func main() {
rect := Rect{10, 20}
area := rect.area() //메소드 호출
println(area)
}
2. Value vs 포인터 receiver
- Value receiver는 struct의 데이타를 복사(copy)하여 전달한다.
- Value receiver의 경우 만약 메소드내에서 그 struct의 필드값이 변경되더라도 호출자의 데이타는 변경되지 않는다.
- 포인터 receiver는 struct의 포인터만을 전달한다.
- 포인터 receiver는 메소드 내의 필드값 변경이 그대로 호출자에서 반영된다.
// 포인터 Receiver
func (r *Rect) area2() int {
r.width++
return r.width * r.height
}
func main() {
rect := Rect{10, 20}
area := rect.area2() //메소드 호출
println(rect.width, area) // 11 220 출력
}
- Go에서 포인터는 원본을 변경한다고 생각하면 편할 것 같다.(여태까지 공부한 결과 그랬음)
참고 사이트
http://golang.site/go/article/17-Go-%EB%A9%94%EC%84%9C%EB%93%9C
728x90
'개발 > Go' 카테고리의 다른 글
[Go] 기초 - Error (0) | 2022.07.31 |
---|---|
[Go] 기초 - 인터페이스 (0) | 2022.07.30 |
[Go] 기초 - 구조체(Struct) (0) | 2022.07.27 |
[Go] 기초 - 패키지 (0) | 2022.07.25 |
[Go] 기초 - 컬렉션 (Map) (0) | 2022.07.22 |