4.4.1 인터페이스 정의
다음과 같이 메서드 서명을 묶어 하나의 인터페이스로 정의한다.
type 인터페이스명 interface { 메서드1(매개변수) 반환타입 메서드2(매개변수) 반환타입 }
인터페이스에 정의된 메서드와 서명이 같은 메서드를 가진 타입은 인터페이스로 사용할 수 있다.
다음 코드에서는 area() 메서드를 가진 shaper 인터페이스를 정의한다. 그리고 shaper 인터페이스를 매개변수로 받아, shaper에 있는 area() 메서드의 실행 결과를 출력하는 describe() 함수를 정의한다.
type shaper interface { area() float64 } func describe(s shaper) { fmt.Println("area :", s.area()) }
다음 코드에서는 rect 구조체와 area() 메서드를 정의한다. main 함수에서는 rect 타입의 값을 매개변수로 전달하여 describe() 함수를 실행한다.
type rect struct{ width, height float64 } func (r rect) area() float64 { return r.width * r.height } func main() { r := rect{3, 4} describe(r) // area : 12 }
rect 구조체와 shaper 인터페이스는 코드에서 아무런 연결 고리가 없다. rect 타입이 shaper 인터페이스에 정의된 메서드 area()를 제공하면, rect 타입 값을 shaper 인터페이스로 사용할 수 있다.