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 + "]" }