더북(TheBook)

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 인터페이스로 사용할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.