특정 인터페이스를 인자로 받는 함수를 구현하면 해당 인터페이스를 구현한 임의의 객체들에 대해 일관된 방법으로 처리할 수 있음
예를 들어 아래와 같은 3줄짜리 함수를 하나 만들면
func WriteTwice(writer io.Writer, p []byte) {
writer.Write(p)
}
이거 하나로 io.Writer를 구현한 모든 객체들(파일, 표준출력, 문자열, 바이트 버퍼, TCP 소켓 및의 자가 제작한 임의의 객체)에 대해 바이너리 데이터를 출력 가능하고
func MyCopy(writer io.Writer, reader io.Reader) {
var bytes []byte
reader.Read(bytes)
writer.Write(bytes)
}
이런 거 하나로 문자열을 소켓으로 전송하거나 표준입력을 파일에 저장하는 등의 작업이 가능
이걸 메소드 오버로딩으로 처리하려면 코딩 양이 엄청 늘어나겠지
댓글 0