Updated:

less than 1 minute read

개요

  • 타입이 가져야하는 메소드들의 집합
  • 타입 단언(type assertion)
    • 인터페이스를 특정 타입으로 변환
    • 두번째 반환 값을 통해 변환 성공 여부 확인
  • Stringer 인터페이스
    • 문자열을 반환하는 String() 메소드 정의


예제

  • 코드
     package main
        
     import "fmt"
        
     type polygon interface {
     	getArea() int
     }
        
     type triangle struct {
     }
        
     func (t *triangle) getArea() int {
     	return 1
     }
        
     func (t *triangle) String() string {
     	return "triangle"
     }
        
     func (t *triangle) triangleFunc() {
     	println("triangleFunc() call")
     }
        
     type square struct {
     }
        
     func (s *square) getArea() int {
     	return 2
     }
        
     func (s *square) String() string {
     	return "square"
     }
        
     func (s *square) squareFunc() {
     	println("squareFunc() call")
     }
        
     func job(pg polygon) {
     	fmt.Println(pg)
        
     	println(pg.getArea())
        
     	t, ok := pg.(*triangle)
     	if ok {
     		t.triangleFunc()
     	}
        
     	s, ok := pg.(*square)
     	if ok {
     		s.squareFunc()
     	}
     }
        
     func main() {
     	job(&triangle{})
        
     	println("\n------\n")
        
     	job(&square{})
     }
    
  • 실행 결과
     triangle
     1
     triangleFunc() call
        
     ------
        
     square
     2
     squareFunc() call