∮explotación≒ 개발

java Interfaces

파란형 2023. 3. 4.
반응형

interface

interface 인터페이스

 

Java의 인터페이스

서로 다른 프로그래머 그룹이 소프트웨어의 상호 작용 방식을 설명하는 "계약"에 동의하는 것이 중요한 경우 소프트웨어 엔지니어링에는 여러 가지 상황이 있습니다. 각 그룹은 다른 그룹의 코드가 어떻게 작성되는지 알지 못하고 코드를 작성할 수 있어야합니다. 일반적으로, 인터페이스 그러한 계약입니다.

예를 들어, 컴퓨터로 제어되는 로봇 자동차가 사람없이 도시 거리를 통해 승객을 운송하는 미래 사회를 상상해보십시오. 자동차 제조업체는 자동차를 정지, 시작, 가속, 좌회전 등으로 작동하는 소프트웨어 ( Java를 작성합니다. 또 다른 산업 그룹 인 전자 안내 기기 제조업체는 GPS ( 글로벌 포지셔닝 시스템 ) 위치 데이터 및 교통 조건의 무선 전송을 수신하고 해당 정보를 사용하여 자동차를 운전하는 컴퓨터 시스템을 만듭니다.

자동차 제조업체는 모든 제조업체 (에서 자동차를 ) 자동차로 옮기기 위해 어떤 방법을 호출 할 수 있는지 자세히 설명하는 산업 표준 인터페이스를 게시해야합니다. 그런 다음 안내 제조업체는 인터페이스에 설명 된 방법을 호출하여 자동차를 명령하는 소프트웨어를 작성할 수 있습니다. 산업 그룹 모두 다른 그룹의 소프트웨어가 어떻게 구현되는지 알 필요가 없습니다. 실제로 각 그룹은 소프트웨어를 매우 독점적으로 간주하고 게시 된 인터페이스를 계속 준수하는 한 언제든지 소프트웨어를 수정할 수있는 권한을 보유합니다.

Java 프로그래밍 언어에서 인터페이스 클래스와 유사한 참조 유형으로 만 상수, 메소드 서명, 기본 메소드, 정적 메소드 및 중첩 유형. 메소드 본문은 기본 메소드 및 정적 메소드에만 존재합니다. 인터페이스는 인스턴스화 할 수 없습니다. — 클래스로만 구현하거나 다른 인터페이스로 확장 할 수 있습니다. 확장은이 섹션의 뒷부분에서 설명합니다.

인터페이스를 정의하는 것은 새 클래스를 만드는 것과 유사합니다:

public interface OperateCar {

   // constant declarations, if any

   // method signatures
   
   // An enum with values RIGHT, LEFT
   int turn(Direction direction,
            double radius,
            double startSpeed,
            double endSpeed);
   int changeLanes(Direction direction,
                   double startSpeed,
                   double endSpeed);
   int signalTurn(Direction direction,
                  boolean signalOn);
   int getRadarFront(double distanceToCar,
                     double speedOfCar);
   int getRadarRear(double distanceToCar,
                    double speedOfCar);
         ......
   // more method signatures
}
 

메소드 서명에는 중괄호가 없으며 세미콜론으로 종료됩니다.

인터페이스를 사용하려면 인터페이스를 구현하는 클래스를 작성하십시오. 인스턴스화 가능한 클래스가 인터페이스를 구현할 때 인터페이스에서 선언 된 각 메소드에 대한 메소드 바디를 제공합니다. 예를 들어,

public class OperateBMW760i implements OperateCar {

    // the OperateCar method signatures, with implementation --
    // for example:
    public int signalTurn(Direction direction, boolean signalOn) {
       // code to turn BMW's LEFT turn indicator lights on
       // code to turn BMW's LEFT turn indicator lights off
       // code to turn BMW's RIGHT turn indicator lights on
       // code to turn BMW's RIGHT turn indicator lights off
    }

    // other members, as needed -- for example, helper classes not 
    // visible to clients of the interface
}
 

위의 로봇 자동차 예에서 인터페이스를 구현하는 것은 자동차 제조업체입니다. 시보레의 구현은 물론 Toyota의 구현과는 실질적으로 다르지만 두 제조업체 모두 동일한 인터페이스를 준수합니다. 인터페이스의 클라이언트 인 안내 제조업체는 자동차 위치에서 GPS 데이터, 디지털 거리지도 및 교통 데이터를 사용하여 자동차를 운전하는 시스템을 구축 할 것입니다. 그렇게함으로써 안내 시스템은 회전, 차선 변경, 브레이크, 가속 등의 인터페이스 방법을 호출합니다.

 

API로서의 인터페이스

로봇 자동차 예는 산업 표준으로 사용되는 인터페이스를 보여줍니다 응용 프로그램 프로그래밍 인터페이스( API ). API는 상용 소프트웨어 제품에서도 일반적입니다. 일반적으로 회사는 다른 회사가 자체 소프트웨어 제품에 사용하려는 복잡한 방법이 포함 된 소프트웨어 패키지를 판매합니다. 최종 사용자 그래픽 프로그램을 만드는 회사에 판매되는 디지털 이미지 처리 방법 패키지가 그 예입니다. 이미지 처리 회사는 인터페이스를 구현하기 위해 클래스를 작성하여 고객에게 공개합니다. 그런 다음 그래픽 회사는 인터페이스에 정의 된 서명 및 반환 유형을 사용하여 이미지 처리 방법을 호출합니다. 이미지 처리 회사의 API는 고객에게 ( 공개되었지만 ) API의 구현은 실제로 철저한 비밀로 유지됩니다,고객이 의존 한 원래 인터페이스를 계속 구현하는 한 나중에 구현을 수정할 수 있습니다.

 

인터페이스 정의

인터페이스 선언은 수정 자, 키워드로 구성됩니다 interface, 인터페이스 이름, 쉼표로 구분 된 상위 인터페이스 목록 ( (있는 경우 )) 및 인터페이스 본문. 예를 들면 다음과 같습니다:

public interface GroupedInterface extends Interface1, Interface2, Interface3 {

    // constant declarations
    
    // base of natural logarithms
    double E = 2.718282;
 
    // method signatures
    void doSomething (int i, double x);
    int doSomethingElse(String s);
}
 

그만큼 public 액세스 지정자는 모든 패키지의 모든 클래스에서 인터페이스를 사용할 수 있음을 나타냅니다. 인터페이스가 공개되도록 지정하지 않으면 인터페이스와 동일한 패키지에 정의 된 클래스 만 인터페이스에 액세스 할 수 있습니다.

인터페이스는 클래스 서브 클래스와 같이 다른 인터페이스를 확장하거나 다른 클래스를 확장 할 수 있습니다. 그러나 클래스는 하나의 다른 클래스 만 확장 할 수 있지만 인터페이스는 여러 인터페이스를 확장 할 수 있습니다. 인터페이스 선언에는 확장 된 모든 인터페이스의 쉼표로 구분 된 목록이 포함됩니다.

인터페이스 본문에는 추상 메소드, 기본 메소드 및 정적 메소드가 포함될 수 있습니다.

인터페이스 내의 추상 방법 다음에 세미콜론이 뒤 따르지만 중괄호 (은 구현 )을 포함하지 않습니다.

기본 방법은 default 수정 자 및 정적 메소드 static 키워드. 인터페이스의 모든 추상, 기본 및 정적 메소드는 암시 적으로 공개되므로 public 수정 자.

또한 인터페이스에는 일정한 선언이 포함될 수 있습니다. 인터페이스에 정의 된 모든 상수 값은 암시 적으로 public, static, final. 다시 한번,이 수정자를 생략 할 수 있습니다.

 


 

 

※ 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공 받을 수 있습니다 

반응형

'∮explotación≒ 개발' 카테고리의 다른 글

java Lambda Expressions  (0) 2023.03.08
java Introducing Generics  (0) 2023.03.08
Oracle 오라클 조인 [ ANSI JOIN, Oracle Join ]  (0) 2023.02.28
java Record  (0) 2023.02.25
java Switch 에 대한 설명  (0) 2023.02.22

댓글