이번 편의 목표: 종이책과 전자책이 서로 다른 하루 요율을 쓰면서, 같은 Fee 이름으로 호출되게 합니다.
interface는 메서드 목록입니다. 그 목록을 가진 타입은 인터페이스 값으로 넘길 수 있습니다. implements 키워드는 없습니다. 메서드가 있으면 구현입니다.
package main
import "fmt"
type Overdue interface {
Fee() int
}
type Paper struct {
Days int
}
type Ebook struct {
Days int
}
func (paper Paper) Fee() int {
if paper.Days <= 0 {
return 0
}
return paper.Days * 100
}
func (ebook Ebook) Fee() int {
if ebook.Days <= 0 {
return 0
}
return ebook.Days * 50
}
func printFee(item Overdue) {
fmt.Println(item.Fee())
}
func main() {
printFee(Paper{Days: 2})
printFee(Ebook{Days: 2})
}출력은 200과 100, 두 줄입니다. 종이책은 하루 100원, 전자책은 하루 50원입니다. printFee는 구조체 필드를 모릅니다. 인터페이스가 요구한 Fee만 호출합니다.
메서드 이름이 인터페이스와 같아야 합니다. Fee와 fee는 다른 이름입니다. 이 편은 대문자 Fee로 맞춰 두었습니다.
직접 해 보기
두 구조체의 Days를 3으로 바꿔 출력이 300과 150인지 확인하세요.
해설
종이책 3일은 300원이고 전자책 3일은 150원입니다. printFee는 수정하지 않습니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.