쉽게 배우는 JAVA2-4
"이 글은 글쓴이가 부스트 코스에 쉽게 배우는 JAVA2를 통해 배우는 점을 적는 공간입니다.
interface를 정의하라는 글을 쓰라면 몇 날 며칠이 걸리지도 모른다. 완벽하게 정의할 수 도 없을 것이다.
그래서 interface가 하는 대표적인 기능과 사용법만을 적어보려고 한다.
Interface
interface는 하나의 규제이다. 예를 들어 모든 가전제품을 만들 때 어떠한 기능을 하는가? 어떠한 형태를 갖고 있는가에 대해서는 자유롭지만 220V의 콘센트를 사용해야 한다 라는 규제가 있다. 이것이 바로 interface이다. 이런 인터페이스의 장점은 클래스의 기능이 너무 많아져서, 기능들을 선택적으로만 사용자에게 제공하려고 할 때, 또는 다른 사람들과 협업할 때, 기능을 명확히 하고 싶을 때, 여러 목적의 클래스들을 공통적으로 혹은 기능적으로 묶으려고 할 때 등 되게 유용적으로 사용할 수 있다.
package code;
interface Calculable{
double PI = 3.14;
int sum(int v1 , int v2);
}
interface Printable {
void print();
}
class RealCal implements Calculable, Printable{
public int sum(int v1, int v2) {
return v1+v2;
}
@Override
public void print() {
System.out.println("This is RealCal!!");
}
}
public class InterfaceApp {
public static void main(String[] args) {
RealCal c = new RealCal();
System.out.println(c.sum(2, 1));
c.print();
System.out.println(c.PI);
//다형성
Printable p = new RealCal();
//System.out.println(p.sum(2,1)); 오류 문장!!!!
p.print();
}
}
보통 엔터페이스는 첫 글자를 대문자로 시작하고 형용사의 형식으로 많이 정의됩니다.
위 코드의 Interface Calculable의 PI를 보면 interface 또한 변수를 선언할 수 있습니다. 단 선언할 때 무조건 초기화되어야 하며 추후 클래스에서 이 값을 수정할 수 없습니다. 또한 Class RealCal처럼 여러개의 interface를 적용할 수 있으며 한가지만이 적용되는 상속과는 대조적입니다. 인터페이스있는 모든 메소드를 구현해야합니다.
위 코드에서 메인 문의 인스턴스 p를 보면 여러개의 인터페이스를 적용했다 하더라도 다형성을 사용하여 자료형 타입을 Printable로 선언했을 때는 Printable의 멤버(변수와 메소드)만을 사용할 수 있으며 다른 인터페이스의 멤버를 사용할 게 되면 System.out.println(p.sum(2,1));과 같이 오류가 발생하게 됩니다!