인터페이스

인터페이스 interface

abstract, final과 함께 대표적인 규제 중 하나

A 객체(클래스)가 특정한 인터페이스를 사용한다고 할 때, 그 객체는 반드시 인터페이스의 메소드들을 구현해야 하는 것이 인터페이스야

interface I {
    public void z();
}

class A implement I {
    public void z() {}
}

 

인터페이스 I는 z메소드를 마치 추상화처럼 시그니처만 정해놓음 → "클래스 A가 인터페이스 I를 구현한다"

→ 이때, 클래스 A는 z메소드 {}안에 로직을 만들어서 인터페이스I가 갖고있던 메소드를 구체적으로 구현하는 거야


인터페이스는 해당 클래스가 어떤 메소드를 갖고 있는지, 어떤 멤버를 갖고있는지 등 명세서 역할

이 명세서(인터페이스)에 적혀있는 대로 클래스의 멤버를 구체적으로 구현해야 컴파일이 되고, 서로 의사소통에 혼란을 주는 것도 줄일 수 있음

또한 A클래스를 만들고, A클래스를 바탕으로 B클래스를 만든다고 할 때

A클래스가 다 만들어진 다음에 B클래스를 만드는 것이 한달이 걸린다고 가정해볼게.

그런데 A클래스를 만드는 동시에 B클래스를 만드는 개발자가 A클래스의 인터페이스를 바탕으로 B클래스를 


인터페이스 규칙

 

① 인터페이스에서 정의되는 멤버들의 접근 제어자 = public

인터페이스 안에 있는 메소드들은 그 인터페이스를 구현하는 클래스를 조작하는 외부장치

public interface Calculatable {
    public void setOprands(int first, int second, int third);
    public void sum();
    public void avg();
}

class Calculator implements Calculatable {
    int first, second, third;
    public void setOprands(int first, int second, int third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }
}

Calculator의 경우, setOprands,sum,avg메소드는 그 대상이 되는 Calculator 시스템을 제어하기 위해서 public 으로 된

조작장치

 

② 하나의 클래스가 두 개 이상 인터페이스 구현 가능 (상속은 단 하나의 부모 클래스만 상속받을 수 있음)

interfact I1 {
    public void x();
}

interface I2 {
    public void y()
}

class A implements I1,I2 {
    public void x() {}
    public void y() {}
}

 

 

③ 인터페이스끼리 상속도 가능

단, 상속받은 인터페이스를 구현하는 클래스는 자식 인터페이스의 메소드와 부모 인터페이스의 메소드까지 구현해야해

interface I3 {
    public void x()
}

interface I4 extends I3{
    public void y()
}

class B implements I4 {
    public void x(){}
    public void y(){}
}

 

 

'하다보면 되겠지 머.,. > 생활코딩_JAVA' 카테고리의 다른 글

예외1 - 문법  (0) 2021.11.07
다형성  (0) 2021.11.04
추상 Abstract ↔ final  (0) 2021.11.03
접근제어자  (0) 2021.11.03
API  (0) 2021.10.23