프로그래밍과 잡담

GO언어에서 다형성 사용해보기 본문

프로그래밍/Go 언어

GO언어에서 다형성 사용해보기

크레온 2016. 5. 28. 17:42

Go 언어에서는 다형성을 지원한다.


심심해서 한번 해봤는데 그에 대한 걸 적어본다.


Go 언어는 특이하게도 명시적으로 해당 인터페이스를 구현한다고 명시안해도 동작 방식이 같으면 동작을 한다.


편하다면 편한거지..


동물 인터페이스가 있다.  동물들은 소리를 내니.. Sound라는 메소드를 넣었다.



package main


//println을 사용하기 위해서는 반듯이 import 해야한다.

import "fmt"


//인터페이스

type Animal interface{

Sound() string

}


//개 구조체

type Dog struct { }


//개 구조체가 사용할 메소드

func (this Dog) Sound() string{

return "멍멍"

}


//고양이 구조체

type Cat struct{}


//고양이 구조체가 사용하는 메소드

func (this Cat) Sound() string{

return "야옹"

}


//메인 함수 Go언어도 C언어와 마찮가지로 main에서 시작한다.

func main(){


  //tmp 변수 만들고

var tmp Animal

  //인스턴스 생성

dog := Dog{}

        //tmp에 dog를 할당하면..

tmp = dog

        //tmp의 Sound가 Dog의 Sound를 호출한다.

fmt.Println(tmp.Sound())

 

  cat := Cat{}

  tmp = cat


fmt.Println(tmp.Sound())


}





위의 소스는 위에 링크에서 실행해 볼 수 있다.


소스에서 보는거 처럼 각 구조체들에 인터페이스를 구현한다는 선언이 없다. 


하지만 생긴건 인터페이스의 Sound 와 같기 때문에 실행하면 


멍멍 과 야옹이 결과로 나온다.. 이걸 덕타이핑이라는 용어로 쓰는 듯하다.  


근데 이런 식으로 내부적으로 처리해주는 언어들은 주석을 잘 달아야지..


다른 사람들이 알아보기 쉽지. 만든 놈이 주석도 안달고 그러면  이 소스를 보는 사람이 좆 될수 있다.


아닌 언어들도 주석을 안달면 보기어렵지만 이런 언어들은 더 보기 어려울듯..





반응형

'프로그래밍 > Go 언어' 카테고리의 다른 글

GO언어라는 걸 둘러 보고 있다..  (0) 2016.05.28
Comments