더북(TheBook)

Item, Rental, DiscountItem, Items는 모두 Cost() 메서드와 String() 메서드를 가지므로 Itemer 인터페이스로 사용될 수 있다. 즉, Order 구조체의 Itemer 필드에는 여러 값을 Items로 묶어 할당할 수도 있고, Item, Rental, DiscountItem를 직접 할당할 수도 있다.


func main() {
    shirt := Item{"Men's Slim-Fit Shirt", 25000, 3}
    video := Rental{"Interstellar", 1000, 3, Days}
    eventShoes := DiscountItem{
        Item{"Women's Walking Shoes", 50000, 3},
        10.00,
    }
 
    order1 := Order{Items{shirt, eventShoes}, 10.00}
    order2 := Order{video, 5.00}
     
    fmt.Println(order1)
    fmt.Println(order2)
}

실행 결과

Total price: 231000(tax rate: 10.00)
Order details: 2 items. total: 210000
- [Mhuen's Slim-Fit Shirt] 75000
- [Women's Walking Shoes] 150000 => 135000(10% DC)
Total price: 3150(tax rate: 5.00)
Order details: [Interstellar] 3000

Note Go 기본 라이브러리에서 인터페이스 임베딩이 사용된 예

io 패키지의 ReadWriter 인터페이스

type ReadWriter interface {
     Reader
     Writer
}

io 패키지의 ReadWriteCloser 인터페이스

type ReadWriteCloser interface {
     Reader
     Writer
     Closer
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.