소프트웨어 엔지니어링에는, 여러 프로그래머 그룹들이, 많은 경우에, 그들의 소프트웨어간 상호작용 방법을 서술하는 "계약" 에 동의하는 것이 중요합니다.
각 그룹은 다른 그룹의 코드 작성 방법을 모르고도 자신의 코드를 작성할 수 있어야 합니다.
일반적으로, interfaces가 그런 종류의 계약입니다.
There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts.
예를 들어, 컴퓨터가 제어하는 로봇 자동차들이 운전자없이 도심 거리에서 승객을 나르는 미래 사회를 상상해보십시오.
자동차 제조업체들은 자동차를 운전하는 (정지, 출발, 가속, 좌회전 등) 소프트웨어(물론 자바)를 만듭니다.
다른 산업 그룹, 전자 유도 기기 메이커는, GPS(글로벌 포지셔닝 시스템)의 위치 데이터와 트래픽 상태의 무선 전송을 수신하여 그 정보를 차량 운전에 사용하는 컴퓨터 시스템을 만듭니다.
For example, imagine a futuristic society where computer-controlled robotic cars transport passengers through city streets without a human operator. Automobile manufacturers write software (Java, of course) that operates the automobile—stop, start, accelerate, turn left, and so forth. Another industrial group, electronic guidance instrument manufacturers, make computer systems that receive GPS (Global Positioning System) position data and wireless transmission of traffic conditions and use that information to drive the car.
자동차 제조업체는 자동차(전 업체의 모든 차)를 이동시키려면 어떤 메소드가 호출되는지가 상세하게 명시된 업계-표준 interface를 게시해야 합니다.
그래야 전자 유도 기기 메이커가 자동차에게 명령하기 위하여 interface에 기재된 메소드를 호출하는 소프트웨어를 만들 수 있습니다.
한 산업 그룹은 다른 그룹의 소프트웨어가 구현된 방법을 알 필요가 없습니다.
사실, 각 그룹은 자사의 소프트웨어를 매우 독점적으로 고려하고, 게시된 interface를 준수하는 한 언제든지 자사 소프트웨어를 수정할 수 있습니다.
The auto manufacturers must publish an industry-standard interface that spells out in detail what methods can be invoked to make the car move (any car, from any manufacturer). The guidance manufacturers can then write software that invokes the methods described in the interface to command the car. Neither industrial group needs to know how the other group's software is implemented. In fact, each group considers its software highly proprietary and reserves the right to modify it at any time, as long as it continues to adhere to the published interface.
Interfaces in Java
자바 프로그래밍 언어에서, interface는 상수(constants), 메소드 signatures, default 메소드, static 메소드, nested 타입 만을 포함할 수 있는, 클래스와 유사한 참조 타입(reference type) 입니다.
메소드의 몸체에는 default 메소드와 static 메소드 만 존재합니다.
interface는 인스턴스화 될 수 없고 - 클래스만이 구현할 수 있거나(implement) 다른 인터페이스가 확장될 수 있습니다(extend).
확장은 이 단원의 뒷부분에 설명되어 있습니다.
interface를 정의하는 것은 새로운 클래스를 만드는 것과 비슷합니다:
In the Java programming language, an interface is a reference type, similar to a class, that can contain only constants, method signatures, default methods, static methods, and nested types. Method bodies exist only for default methods and static methods. Interfaces cannot be instantiated—they can only be implemented by classes or extended by other interfaces. Extension is discussed later in this lesson.
Defining an interface is similar to creating a new class:
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 }
메소드 signatures에는 중괄호가 없으며, 세미콜론으로 종료된다는 점을 알아야 합니다.
interface를 사용하려면 interface를 구현하는(implements) 클래스를 작성합니다.
인스턴스화될 클래스가 interface를 구현할 때, 그 클래스는 interface에 선언된 각각의 메소드에 메소드 몸체를 제공합니다.
Note that the method signatures have no braces and are terminated with a semicolon.
To use an interface, you write a class that implements the interface. When an instantiable class implements an interface, it provides a method body for each of the methods declared in the interface.
예를 들면, For example,
public class OperateBMW760i implements OperateCar { // the OperateCar method signatures, with implementation -- // 예: int signalTurn(Direction direction, boolean signalOn) { // BMW의 좌회전 지시등을 켜는 코드 // BMW의 좌회전 지시등을 끄는 코드 // BMW의 우회전 지시등을 켜는 코드 // BMW의 우회전 지시등을 끄는 코드 } // 필요한 경우 다른 멤버들 -- 예, interface의 클라이언트에게는 보이지 않는 helper클래스 }
위 예제의 로봇 차에서, interface는 자동차 제조업체가 구현합니다.
물론 구체적으로는 시보레의 구현이 도요타의 구현과 다를 수 있지만, 두 제조사는 동일한 interface를 사용합니다.
인터페이스의 클라이언트인 전자 유도 기기 메이커는, 자동차를 운전하기 위하여, 차량 위치에 대한 GPS 데이터, 디지털 도로지도 및 트래픽 데이터를 사용하는 시스템을 만들 것입니다.
그렇게 하기 위하여, 안내 시스템은 회전, 차선 변경, 브레이크, 가속 등과 같은 interface 메소드를 호출할 것입니다.
In the robotic car example above, it is the automobile manufacturers who will implement the interface. Chevrolet's implementation will be substantially different from that of Toyota, of course, but both manufacturers will adhere to the same interface. The guidance manufacturers, who are the clients of the interface, will build systems that use GPS data on a car's location, digital street maps, and traffic data to drive the car. In so doing, the guidance systems will invoke the interface methods: turn, change lanes, brake, accelerate, and so forth.
API로서의 인터페이스 Interfaces as APIs
로봇 자동차의 예는 업계 표준 애플리케이션 프로그래밍 인터페이스 (API)로 사용되는 인터페이스를 보여주고 있습니다.
API는 또한 상용 소프트웨어 제품에서 일반적입니다.
일반적으로, 어떤 회사는 다른 회사가 자신의 소프트웨어 제품에 사용하고자 하는 복잡한 메소드들이 포함된 소프트웨어 패키지를 판매합니다.
최종-사용자 그래픽 프로그램을 만드는 회사에 판매되는 디지털 이미지 처리 메소드들의 패키지가 그 예가 될 수 있습니다.
이미지 처리 회사는 interface를 구현하기 위해 클래스들을 작성하면, 그 클래스들이 고객들에게 공개됩니다.
그러면 그래픽 회사는 서명을 사용하여 이미지 처리 메소드들을 호출하고, interface에 정의된 타입들을 리턴합니다.
이미지 처리 회사의 API가 (고객에게) 공개되는 동안, API의 구현은 극비로 보호되어 유지되는데 - 사실, 고객들이 의존하는 원래의 인터페이스를 구현 하기 위하여 그것이 계속되는 한, 나중에 구현을 수정할 수도 있습니다.
The robotic car example shows an interface being used as an industry standard Application Programming Interface (API). APIs are also common in commercial software products. Typically, a company sells a software package that contains complex methods that another company wants to use in its own software product. An example would be a package of digital image processing methods that are sold to companies making end-user graphics programs. The image processing company writes its classes to implement an interface, which it makes public to its customers. The graphics company then invokes the image processing methods using the signatures and return types defined in the interface. While the image processing company's API is made public (to its customers), its implementation of the API is kept as a closely guarded secret—in fact, it may revise the implementation at a later date as long as it continues to implement the original interface that its customers have relied on.
'Java 배우기' 카테고리의 다른 글
Implementing an Interface 인터페이스 구현하기 (0) | 2016.01.05 |
---|---|
Defining an Interface 인터페이스 정의하기 (0) | 2016.01.05 |
Lesson: Interfaces and Inheritance 단원: 인터페이스와 상속 (0) | 2016.01.05 |
Questions and Exercises: Annotations (0) | 2016.01.05 |
Repeating Annotations (0) | 2016.01.05 |
댓글