go언어
글 수 53
이 글은 Effective Go를 일부 번역한 글입니다.
인터페이스와 그 외 다른 유형들
인터페이스
Go의 인터페이스가 객체의 행동을 지정하는 방법은 이렇다. 무언가가 ‘이걸’ 할 수 있으면 ‘여기’에 쓸 수 있다. 우린 이미 여러 간단한 예제를 보았다. String 메서드로 자작 프린터를 만들 수 있었고, Write 메서드로 Fprintf가 출력할 수 있었다. Go 코드에선 메서드 두어 개만으로 인터페이스를 구성하는 게 일반적이다. 그리고 보통은 그 메서드 이름을 따 인터페이스 이름을 짓는다. Write로 구성된 io.Writer처럼 말이다.
유형 하나에 여러 인터페이스를 구현할 수 있다. 예를 들어, Len(), Less(i, j int) bool, Swap(i, j int)을 포함하는 sort.Interface를 구현한 모음(Collection)은 sort 패키지 루틴으로 정렬할 수 있다. 그리고 이 모음은 자체 형식자(Formatter)도 가질 수 있다. 여기 짜맞춘 예시인 Sequence가 둘 다 만족한다.
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
// Method for printing - sorts the elements before printing.
func (s Sequence) String() string {
sort.Sort(s)
str := "["
for i, elem := range s {
if i > 0 {
str += " "
}
str += fmt.Sprint(elem)
}
return str + "]"
}


