더북(TheBook)

Go는 컴파일 기반의 정적 타입 언어이다. 하지만 동적 언어의 특성도 수용함으로써 동적인 느낌으로 코드를 작성할 수 있다. 즉, 컴파일러의 보장을 받으며 동적 언어의 유연함과 자유를 만끽할 수 있다. 이를 가능하게 해주는 것이 바로 덕 타이핑(duck typing) 방식으로 동작하는 Go의 인터페이스다.

Go의 인터페이스를 좀 더 자세히 살펴보자. Go에서 인터페이스의 역할은 객체의 동작을 표현하는 것이다. 인터페이스가 표현하고 있는 방식대로 객체가 동작한다면, 이 객체를 인터페이스로 사용할 수 있다.

Note 덕 타이핑

컴퓨터 프로그래밍 분야에서 덕 타이핑(http://bit.ly/1ZGOevQ)은 동적 타이핑의 한 종류로, 객체의 변수나 메서드의 집합이 객체의 타입을 결정하는 것을 말한다. 덕 타이핑은 클래스 상속이나 인터페이스 구현으로 타입을 구분하는 대신, 객체가 어떤 타입에 걸맞은 변수와 메서드를 지니면 객체가 그 타입에 속하는 것으로 간주한다. ‘덕 타이핑’이라는 용어는 ‘덕 테스트’에서 유래했다. 덕 테스트는 다음과 같다.

 

“만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다.”

만약 특정 타입이 어떤 인터페이스를 구현(implement)한다면, 그 타입은 인터페이스가 정의한 방식대로 동작할 수 있다는 의미이다. 그냥 그게 전부다. implements 같은 키워드로 어떤 인터페이스를 구현했는지 정의할 필요 없다. 그저 특정 인터페이스에서 정의한 메서드를 가지고 있기만 하면 된다.

동작이라고 표현한 것을 기억하자. 대부분의 정적 타입 언어에서 인터페이스가 그 타입의 태생이 무엇인지를 이야기한다면, Go의 인터페이스는 특정 타입이 어떻게 동작하는지를 이야기한다.

Read() 메서드가 정의된 Reader 인터페이스가 있다고 해보자. 만약 A라는 타입에 Read() 메서드가 정의되어 있다면, A 타입은 Reader 인터페이스로 사용될 수 있다. A 타입과 Reader 인터페이스는 코드에서 어떠한 연결 고리도 없다.

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