더북(TheBook)

4.1 계약 정의를 위한 인터페이스 사용

이 절에서는 인터페이스를 사용하여 계약을 정의하는 방법을 설명한다. 자바에서 인터페이스는 특정 책임을 선언하는 데 사용하는 추상 구조다. 인터페이스를 구현하는 객체는 이 책임을 정의해야 한다. 동일한 인터페이스를 구현하는 여러 객체는 해당 인터페이스가 선언한 책임을 다른 방식으로 정의할 수 있다. 인터페이스는 ‘무엇이 발생해야 하는지(필요 대상)’를 지정하는 반면, 인터페이스를 구현하는 모든 객체는 ‘어떻게 그것이 발생해야 하는지(발생 방법)’를 지정한다고 볼 수 있다.

어렸을 때 필자 아버지는 가지고 놀라며 낡은 라디오를 주셨다(당시 필자는 무언가를 분해하는 것에 꽤 심취했었다). 필자는 그 라디오를 보면서 케이스 볼트를 풀 수 있는 무언가가 필요하다는 것을 깨달았다. 잠시 고민한 끝에 칼이 있으면 좋겠다고 생각해서 아버지께 칼을 빌려 달라고 했다. 아버지는 “칼이 왜 필요하니?”라고 물으셨고, 케이스를 여는 데 필요하다고 대답했다. “오!” 아버지는 말씀하셨다. “칼보다는 드라이버를 쓰는 게 낫겠구나. 여기 있다!” 그때 필자는 무엇을 해야 할지 모를 때는 해결책을 찾기보다 필요한 것을 먼저 물어보는 편이 더 현명함을 배웠다. 인터페이스란 객체가 필요한 것을 요청하는 방식이다.

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