인터페이스는 객체와 객체간의 관계를 정의하는 언어구성요소임.


최근에 Java 8에 functional interface같은, 객체 자체를 구현하는 것보다 객체의 인터페이스, 객체간의 관계를 중요시하는 움직임은 수학이 수학적 대상 그 자체에 대한 관심보다 그 대상 간에 가지는 관계를 중요시하는 움직임에서 시작됐다고 봄.


수학을 formalize하려했던 힐베르트는 기하학에서 점과 선 등 기하학을 이루는 기본 요소(element, object)에 대한 정의를 내리는 것을 포기하고 점과 선이 가지는 관계, 선과 선이 가지는 관계만을 정의한 후 그 로부터 파생되는 성질을 연구했음.


개체 하나보다 여러 개체가 모인 시스템의 구조, 그리고 그 구조에서 개체끼리 가지는 관계를 중요시하는 Structuralism은 범주론이 발명되면서 꽃을 피웠다고 생각하는데 범주론에는 object와 그 object간의 관계인 morphism이 존재함. 근데 Higher Order Category로 넘어가면 object마저 morphism으로 치환되고 morphism의 morphism, morphism의 morphism의 morphism...같은걸로 치환됨 그래서 범주론이 theory of arrow (morphism을 보통 화살표로 그려서 arrow라함)라고 부르기도 함. 구조(대상간의 관계)를 연구해서 대상이 가진 깊은 성질까지 밝혀내는 경우임.


근데 신기한건 대상 자체를 중요시하지 않고 대상간의 관계만 신경써도 크게 문제가 없다는 거임. 심지어 관계로 인해 대상이 정의되기도 함. 극단적인 예를 들면 어떤 x는 정수이고 0보다 크고 2보다 작다. 그리고 모든 자연수에 대해 항등원이다. 식으로 계속 어떠한 인터페이스를 부여해나가면 그 인터페이스를 구현할 수 있는 방식이 하나로 정해짐. 이 경우엔 숫자 1이겠지


이런 수학적으로도 자연스러운 방식을 프로그래밍에 도입하면 아주 자연스러운 API설계가 나올 수 있고 코찔찔흘리면서 디자인패턴 줏어다 적용하는 것보다 훨씬 유연하고 확장성 좋은, 조합성있는 프로그램을 만들 수 있음.