Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- tcp
- FOR
- range
- Callback
- install
- bitcoin
- write
- package
- 책
- Close
- File
- json
- c++
- JavaScript
- API
- GO 언어
- channel
- window
- 영화
- mutex
- go언어
- Golang
- Sync
- Linux
- http
- windows
- go
- Python
- 리뷰
- C
Archives
- Today
- Total
Code Habit
Go ) 구조체-메서드 연결 ( 클래스 ) 본문
Go 언어에는 클래스가 없는 대신 구조체에 메서드를 연결할 수 있다.
- func (변수명 *구조체타입) 함수명() 리턴값자료형 {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
type Rectangle struct {
width int
height int
}
func (rect *Rectangle) area() int { // rect : 구조체 변수 정의 (연결할 구조체 지정)
return rect.width * rect.height // rect. : 구조체 변수를 사용하여 구조체에 접근할 수 있음
}
func main() {
rect := Rectangle{10, 20}
fmt.Println(rect.area()) // 200 : Rectangle 구조체에 연결된 area() 함수를 사용
}
|
함수를 정의할 때 func 키워드와 함수명 사이에 리시버(구조체 변수) 정의 부분이 추가되었다. 이렇게 하면 메서드 안에서는 리시버 변수를 통해 구조체에 접근할 수 있다. 그리고 구조체 인스턴스에 .(점)을 사용하여 연결된 메서드를 호출한다.
함수에 구조체 형태의 매개변수를 넘기는 방식과 마찬가지로 리시버 변수를 받는 방법도 포인터와 일반 구조체 방식이 있다.
1 2 3 4 5 6 7 8 9 | func (rect *Rectangle) scaleA(factor int) { rect.width = rect.width * factor // 포인터이므로 원래의 값이 변경됨 rect.height = rect.height * factor } func (rect Rectangle) scaleB(factor int) { rect.width = rect.width * factor // 값이 복사되었으므로 원래의 값에는 영향을 미치지 않는다. rect.height = rect.height * factor } |
리시버 변수를 사용하지 않는다면 _(밑줄문자)로 변수를 생략할수 있다.