기본 라이브러리의 인터페이스 활용 - io.Writer
Go의 기본 패키지에서 사용되는 인터페이스의 예를 하나 더 보고 인터페이스의 이러한 특징이 실제로 어떤 효과를 주는지 확인해 보자.
다음 io 패키지의 Writer 인터페이스와 fmt 패키지의 Fprintln() 함수는 Go로 프로그래밍할 때 많이 쓰이는 것 중 하나이다.
• io.Writer 인터페이스
type Writer interface { Write(p []byte) (n int, err os.Error) }
• fmt.Fprintln() 함수
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
io.Writer 인터페이스에 정의된 Write() 메서드는 매개변수 p 값을 전달한 후, 실제 전달한 byte의 길이와 에러 상태를 반환하는 동작을 정의한다. fmt.Fprintln() 함수는 첫 번째 매개변수 w 에 두 번째 매개변수를 a를 전달하는 기능을 수행한다.
이 둘로 인터페이스가 어떻게 활용되는지 확인해 보자.
handle() 함수를 다음과 같이 정의했다.
func handle(w io.Writer, msg string) { fmt.Fprintln(w, msg) }
handle() 함수에서는 첫 번째 매개변수로 받은 io.Writer에 두 번째 매개변수로 받은 msg를 fmt.Fprintln(g)로 출력한다.
main 함수에서는 첫 번째 매개변수인 io.Writer로 os.Stdout을 전달한다. 즉, 다음 코드는 해당 msg를 명령 프롬프트에 출력한다.
func main() { msg := []string{“This”, “is”, “an”, “example”, “of”, “io.Writer”}
for _, s := range msg { time.Sleep(100 * time.Millisecond) handle(os.Stdout, s) } }