더북(TheBook)

기본 라이브러리의 인터페이스 활용 - 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에 두 번째 매개변수로 받은 msgfmt.Fprintln(g)로 출력한다.

main 함수에서는 첫 번째 매개변수인 io.Writeros.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) } }

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.