일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Qt OpenGL
- 윈도우7
- 재귀함수
- 스타2
- qt 설치
- Qt4
- c언어
- 바이크
- vuejs
- Qt 소켓프로그래밍
- 디자이어HD
- 오토바이
- QT
- 자바
- 잡담
- QTcpServer
- 정성하
- 양평역
- 이륜차
- 안드로이드
- 자료구조
- 엑티브엑스
- 고속도로
- Java
- android SAF
- 마영전
- 스타크래프트2
- HTML
- FFI
- 알람프로그램
- Today
- Total
프로그래밍과 잡담
GO언어에서 다형성 사용해보기 본문
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 |
---|