개발/Go

[Go] 기초 - 메소드

devhooney 2022. 7. 27. 22:38
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

 

예제로 배우는 Go 프로그래밍 - Go 메서드

1. Go 메서드(Method) 앞에서(Go 구조체) 언급했듯이 Go 언어는 객체지향 프로그래밍(OOP)을 고유의 방식으로 지원한다. 타 언어의 OOP의 클래스가 필드와 메서드를 함께 갖는 것과 달리 Go 언어에서는 s

golang.site

 

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