인터페이스 기반 프로그래밍

Interface-based programming


인터페이스 기반 아키텍처라고도 알려진 인터페이스 기반 프로그래밍은 모듈 시스템이 없는 객체 지향 프로그래밍 언어로 컴포넌트 수준에서 모듈식 프로그래밍을 구현하기 위한 아키텍처 패턴입니다.이러한 언어의 예로는 Java가 있습니다. Java는 (2015년 기준) 컴포넌트 수준의 모듈 시스템을 갖추고 있지 않습니다.Java는 패키지 시스템을 가지고 있지만 Java 소프트웨어 컴포넌트는 일반적으로 여러 Java 패키지로 구성되어 있습니다.또한 인터페이스 프로그래밍은 컴포넌트가 하나의 Java 패키지로만 구성되어 있는 경우에도 단순히 Java 패키지를 사용하는 것에 비해 이점을 제공할 수 있습니다.

인터페이스 기반 프로그래밍은 응용 프로그램을 컴포넌트의 집합으로 정의합니다.이 경우 컴포넌트 간의 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스) 은 추상 인터페이스를 통해서만 실행할 수 있으며 구체적인 클래스는 사용할 수 없습니다.클래스의 인스턴스는 일반적으로 공장 출하 패턴 등의 기술을 사용하여 다른 인터페이스를 통해 취득됩니다.

이로 인해 애플리케이션의 모듈성이 향상되어 유지관리성이 향상된다고 주장되고 있습니다.단, 인터페이스를 통해 통신하는 임의의 컴포넌트로 애플리케이션을 분할하는 것만으로 낮은 커플링이나 높은 응집력을 보증하는 은 아닙니다.이것은 일반적으로 유지보수성의 열쇠로 간주되는 다른 두 가지 특성입니다.

인터페이스 베이스의 아키텍처는, 서드 파티(또는 같은 조직내의 다른 팀)가, 확립된 시스템의 추가 컴포넌트 또는 플러그인을 개발할 경우에 사용할 수 있습니다.Eclipse IDE의 코드베이스는 인터페이스 기반 프로그래밍의 한 예입니다.Eclipse 플러그인 공급업체는 상위 응용프로그램 공급업체인 Eclipse Foundation에서 지정한 인터페이스를 충족하는 구성 요소만 개발하면 됩니다.실제로 Eclipse에서는 Java Development Tools와 같은 원래 컴포넌트도 플러그인입니다.이는 휴대전화 제조사가 모바일 충전기 인터페이스(핀 배치, 예상 직류 전압 등)를 지정하고 제조사와 서드파티 모두 이 표준 인터페이스 사양에 준거한 독자적인 휴대전화 충전기를 제조하는 것과 비슷합니다.

인터페이스 기반 프로그래밍의 소프트웨어 진화

인터페이스를 사용하여 서로 다른 팀이 협업할 수 있게 되면 인터페이스 기반 프로그래밍에서 인터페이스 변경이 어떻게 이루어지는지에 대한 의문이 제기됩니다.문제는 새로운 메서드를 추가하는 등 인터페이스가 변경되면 인터페이스를 구현하기 위해 작성된 오래된 코드가 컴파일되지 않고 동적으로 로드된 플러그인 또는 링크된 플러그인의 경우 로드 또는 링크에 실패하거나 런타임에 크래시가 발생한다는 것입니다.이 문제에 대처하기 위한 기본적인 접근방식은 다음 두 가지가 있습니다.

  1. 새로운 인터페이스는 오래된 인터페이스로부터 상속받을 수 있는 추가 기능을 사용하여 개발될 수 있습니다.
  2. 시멘틱 버전 2.0과 같은 소프트웨어 버전 정책은 미래의 "주요" 버전의 플랫폼 변경을 가능하게 하기 위해 인터페이스 구현자에게 전달될 수 있습니다.

이 두 가지 접근 방식은 모두 Java 플랫폼에서 사용되었습니다.

계약에 의한 설계

인터페이스의 퍼블리셔는 일반적으로 소프트웨어의 새로운 "소형" 버전에서는 인터페이스를 변경하지 않을 것을 약속하며, 실장자는 인터페이스를 실장함으로써 인터페이스의 최소한 필요한 부분을 어긋나지 않고 실장했음을 의미합니다.따라서 인터페이스는 인터페이스의 공급자와 소비자 사이의 "계약적 합의"로 볼 수 있습니다.이 계약이 소프트웨어 사양으로서 보다 정식으로 문서화되어 있는 경우, 이것은 계약에 의한 설계의 예입니다., 설계 자체가 모든 컴포넌트에 인터페이스를 사용하도록 의무화하는 것은 아닙니다.

「 」를 참조해 주세요.

레퍼런스