TIL_240215(2)

라미·2024년 2월 18일

TIL

목록 보기
14/25
post-thumbnail

인터페이스(interface)

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없다.
  • 모든 멤버가 public 이다.
  • 인터페이스의 조상은 인터페이스만 가능하다.(Object가 최고 조상이 아니다)
  • 인터페이스는 다중 상속이 가능하다
  • 인터페이스의 선언 : interface 인터페이스명 { }
  • 인터페이스의 상속 : class 클래스명 implements 인터페이스명 { }

📝예시

interface 인터페이스이름 {
    public static final 타입 상수이름 =;
    public abstract 메서드이름(매개변수목록); //public abstract 키워드는 생략이 가능하다
}

//인터페이스의 다중 상속 예시
class implements 인터페이스1, 인터페이스2{ }

👍인터페이스 주의사항

- 인터페이스의 모든 멤버는 public, abstract 이기 때문에 public, abstract 키워드는 생략이 가능하다.
- 인터페이스 상속받으면 정의된 추상메서드를 모두 구현해야 한다.
- 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여줘야한다.(상속받은 추상메서드를 구현하지 않았기때문에)

인터페이스 vs 추상클래스

  • 추상클래스는 클래스이지만 추상메서드를 가지고 있는것(생성자, 일반메서드, 필드 등을 가지고 있는다)
  • 인터페이스는 추상메서드만 존재한다.(변수가질 수 없다. 상수는 가능)

인터페이스의 장점

  • 두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간 역할을 한다.
  • 선언(설계)와 구현을 분리시킬 수 있다
  • 개발 시간을 단축할 수 있다.
  • 변경에 유리한 유연한 설계가 가능한다
  • 표준화가 가능하다
  • 서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
  • 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다.(느슨한 결합)
    • classA가 classB에 의존할 때

📝예시 - 직접적인 관계의 두 클래스(A-B)

class A{
    public void methodA(B b){
        b.methodB();
    }
}

class B {
    public void methodB(){
        System.ou.println("methodB()");
    }
}

class InterfaceTest  {
    public static void main(String args[]){
        A a = new A();
        a.methodA(new B());
    }
}

👍

위와 같은 경우 A-B에 의존하고 있다고 볼 수 있다. (class A 에서 B를 사용, B클래스의 메서드를 호출)

📝예시 - 간접적인 관계의 두 클래스(A-I-B)

class A{
    public void methodA(I i){
        b.methodB();
    }
}

interface I { void methodB(); }

class B implements I {
    public void methodB(){
        System.ou.println("methodB()");
    }
}

class C implements I {
    public void methodB(){
        System.ou.println("methodB() in C");
    }
}

👍

class B에 인터페이스를 상속해줘서 A가 B가 아닌 I를 사용하도록 하여,
B를 다른 클래스로 변경해도 A에는 변경이 없게된다.

0개의 댓글