인터페이스는 실존이다. 무엇을 할 수 있는지, 상호작용에 어떻게 반응하는지 나타내는 명세다.

본질은 객체에 부여한 이름이다. 객체가 수행하길 기대하는 바가 반영된 이름.

function sumScore(a: number, b: number) => number

함수이름 sumScore는 본질이고, a와 b라는 number를 받아 number를 반환한다는 인터페이스는 실존이다. 이 함수를 만든 사람은 함수에게 “점수를 더한다”는 역할을 부여했다.

역할이 있어도 인터페이스만 맞다면 다른 역할을 수행할 수 있다.

점수를 더하기 위해 만들었지만 돈을 더하기 위해 사용할 수도 있다. 동작은 하지만 함수를 만든 이가 부여한 본질과는 다른 사용법이다.

“점수를 더한다”는 역할에서 점수는 함수를 만드는 이의 기대이다. 그러나 함수는 “점수”를 몰라도 그 역할을 수행할 수 있다.

원본 1