본문 바로가기
Java 배우기

Implementing an Interface 인터페이스 구현하기

by 노화방지 Anti-aging Hairstyle 2016. 1. 5.
반응형

인터페이스 구현하기    Implementing an Interface



interface를 구현하는 클래스를 선언하려면, 클래스 선언에 implements clause을 포함시킵니다.
클래스는 2개 이상의 인터페이스를 구현할 수 있기 때문에, 키워드 implements의 뒤에는 클래스가 구현한, 쉼표로 구분된 인터페이스 목록이 옵니다.
협약에 의하여, extends clause가 있다면 이 clause가  implements clause의 뒤에 옵니다.

To declare a class that implements an interface, you include an implements clause in the class declaration. Your class can implement more than one interface, so the implements keyword is followed by a comma-separated list of the interfaces implemented by the class. By convention, the implements clause follows the extends clause, if there is one.


샘플 인터페이스, Relatable                A Sample Interface, Relatable


객체들의 사이즈를 비교하는 방법을 정의하는 interface를 검토해봅니다.
Consider an interface that defines how to compare the size of objects.

public interface Relatable {
        
   // this (object calling isLargerThan)
    // and other must be instances of 
    // the same class returns 1, 0, -1 
    // if this is greater than, 
    // equal to, or less than other
    public int isLargerThan(Relatable other);
}

객체가 무엇이든 상관없이, 비슷한 객체의 크기를 비교할 수 있으려면, 그들을 인스턴스화하는 클래스는 Relatable을 구현해야 합니다.

클래스로부터 인스턴스화된 객체의 상대적 "사이즈"를 비교하는 몇 가지 방법이 있다면, 모든 클래스는 Relatable을 구현할 수 있습니다.
strings의 경우, 글자의 수가 될 수 있습니다; 

책의 경우, 페이지 수 일 수 있습니다;
학생의 경우, 그것은 몸무게가 될 수 있습니다; 기타 등등.
평면 기하 객체의 경우, 면적은 좋은 선택이 될 수 있는데(뒤따르는 클래스 RectanglePlus를 참조), 한편 볼륨은 3-차원 기하 객체에 대하여 작동할 것입니다.
그러한 모든 클래스는 theisLargerThan () 메소드를 구현할 수 있습니다.

클래스가 Relatable을 구현함을 알고 있다면, 그 클래스로부터 인스턴스화된 객체의 사이즈를 비교할 수 있음을 알게 된다.
If you want to be able to compare the size of similar objects, no matter what they are, the class that instantiates them should implement Relatable.

Any class can implement Relatable if there is some way to compare the relative "size" of objects instantiated from the class. For strings, it could be number of characters; for books, it could be number of pages; for students, it could be weight; and so forth. For planar geometric objects, area would be a good choice (see the RectanglePlus class that follows), while volume would work for three-dimensional geometric objects. All such classes can implement the isLargerThan() method.

If you know that a class implements Relatable, then you know that you can compare the size of the objects instantiated from that class.


인터페이스 Relatable 구현하기        Implementing the Relatable Interface 


아래는 섹션 Creating Objects에 제시되었던, Relatable 구현을 위하여 재작성된 클래스 Rectangle 입니다.
Here is the Rectangle class that was presented in the Creating Objects section, rewritten to implement Relatable.

public class RectanglePlus implements Relatable { public int width = 0; public int height = 0; public Point origin; // 4개의 생성자 public RectanglePlus() { origin = new Point(0, 0); } public RectanglePlus(Point p) { origin = p; } public RectanglePlus(int w, int h) { origin = new Point(0, 0); width = w; height = h; } public RectanglePlus(Point p, int w, int h) { origin = p; width = w; height = h; } // rectangle 이동을 위한 메소드 public void move(int x, int y) { origin.x = x; origin.y = y; } // rectangle의 면적 계산을 위한 메소드 public int getArea() { return width * height; } // Relatable interface를 구현하는데 필요한 메소드 public int isLargerThan(Relatable other) { RectanglePlus otherRect = (RectanglePlus)other; if (this.getArea() < otherRect.getArea()) return -1; else if (this.getArea() > otherRect.getArea()) return 1; else return 0; } }

Because RectanglePlus implements Relatable, the size of any two RectanglePlus objects can be compared.


Note: The isLargerThan method, as defined in the Relatable interface, takes an object of type Relatable. The line of code, shown in bold in the previous example, casts other to a RectanglePlus instance. Type casting tells the compiler what the object really is. Invoking getArea directly on the other instance (other.getArea()) would fail to compile because the compiler does not understand that other is actually an instance ofRectanglePlus.


반응형

댓글