이번 편의 목표: 연체료 계산과 일수 증가를 책 타입의 메서드로 붙입니다.
func와 이름 사이에 받는 값을 적으면 메서드입니다. 값이 복사되기를 원하면 Book을 받고, 호출자의 책을 바꾸려면 *Book을 받습니다. 변수에서 포인터 메서드를 호출하면 컴파일러가 주소를 넘깁니다.
package main
import "fmt"
type Book struct {
Title string
Days int
}
func (book *Book) addDay() {
book.Days++
}
func (book Book) fee() int {
if book.Days <= 0 {
return 0
}
return book.Days * 100
}
func main() {
book := Book{Title: "생각나무", Days: 3}
book.addDay()
fmt.Println(book.fee())
}출력은 400입니다. addDay가 Days를 3에서 4로 바꾸고, fee가 4 * 100을 돌려줍니다. fee는 책을 복사해서 읽기만 하므로 필드를 바꾸지 않습니다. addDay를 값 수신자로 만들면 복사본의 일수만 늘어나고, main의 book.Days는 3으로 남습니다.
직접 해 보기
addDay를 두 번 호출한 뒤 fee를 출력하세요. 시작이 3이면 결과는 500입니다.
해설
호출마다 일수가 1 늘어납니다. 3에서 두 번 늘어나면 5이고, 연체료는 500입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.