Craftville의 길드들 Craftville마을에는
다양한 인터페이스인 길드들이 있었는데 각각 특정 기술을 대표합니다
대장장이 길드와 제빵사 길드, 제봉사 길드 등이 있었습니다
각 길드에는 일원들이 따라야 할 규칙과 관행이 있었는데 이는 메소드입니다
그러나 몇 마을 사람들은 여러 재능이 있었습니다
예를 들어 Bakelite경은 제빵사 길드의 일원일 뿐만 아니라 제봉 기술도 있어서
다중 인터페이스를 구현하여 제빵사와 제봉사가 되었습니다
다중 길드 자격은 다양한 서비스를 제공할 수 있게 해주어 인터페이스를 통한
다중 상속의 능력을 보여주었습니다
길드들은 개인의 특별한 스타일이나 기술과는 상관없이
계약과 인터페이스가 강제하는 특정 규칙과 관행을 유지하였습니다
프로그래밍에서의 인터페이스는, 특히 Kotlin과 같은 객체 지향 프로그래밍 언어에서는
몇 가지 필수 목적을 갖습니다
첫 째는 추상화입니다
인터페이스는 클래스가 구현할 수 있는 계약을 정의할 수 있게 하는데
이 계약은 파생 클래스가 반드시 구현해야 하는 메소드 시그니처로 구성되어 있으며
무엇을 어떻게 할 지를 추상화합니다
어떻게 할 지는 지금 정하지 않으면서 클래스가 특정 기능을 갖게 할 수 있습니다
두 번째는 다중 상속입니다
Kotlin을 포함한 대부분의 객체 지향 언어는 다이아몬드 문제와 복잡성 때문에
클래스의 다중 상속을 지원하지 않습니다
그러나 클래스는 다중 인터페이스를 구현할 수 있어 다중 상속 기반 클래스의
덩어리 없이도 다중 소스에서 상속 받을 수 있게 합니다
다중 상속이 어떻게 동작하는지는 이미 살펴보았습니다
기본적으로 Archer와 Singer를 이용한 세 번째
예제처럼 말입니다
좋습니다
세 번째는 유연성과 호환성입니다
상속은 어떻게가 아닌 무엇에 집중되어 있기 때문에 다양한 방법으로 같은 인터페이스를 구현한
여러 클래스를 만들 수 있습니다
이 유연성은 이 클래스들의 객체는 연관된 인터페이스에 의해 가능성이 보장된다면
콘텍스트에서 상호 교환적으로 사용될 수 있습니다
네 번째는 캡슐화 입니다
인터페이스를 사용하면 클래스의 내부 구현 사항을 숨길 수 있어 인터페이스에서 선언한
메소드만 노출시킬 수 있습니다
이 캡슐화는 외부 컴포넌트가 잘 정의된 계약을 통해 객체와 상호작용할 수
있게 하며 다섯 번째는 확장성의 진화입니다
소프트웨어가 커지고 진화하면서 인터페이스는 인터페이스에 따른 클래스에 영향을 주지 않고도
기본이 되는 구현을 확장하고 리펙토링할 수 있는 안정적인 계약을 제공합니다