*JAVA*

[java] 인터페이스(Interface)

깐부로부터 2021. 10. 29. 20:59

추상메소드의 집합

구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public)

객체생성은 불가하나 참조변수 타입으로는 OK.

 

*추상클래스(abstract)인터페이스의 차이점*

추상클래스는 일반 클래스인데 추상메소드를 갖고 있는 것일 뿐이다.

(변수, 생성자, 일반 메소드도 다 갖고 있다.)

 

인터페이스추상메소드, 상수필드 이외엔 갖고 있는 것이 없다.

따라서 선언부인 'public static final' 과 'public abstract' 가 생략 가능하다!

 

 

인터페이스의 상속

  • 인터페이스이 조상은 인터페이스만 가능(Object가 최고 조상X)
  • 다중상속 가능(추상메소드는 충돌해도 문제 없다; {몸통}이 없기 때문에 무얼 상속받아도 OK)

implements 키워드로 인터페이스를 구현하다.

다중상속이 가능해서 Mother클래스는 Person클래스를 상속하며 Basic클래스를 구현하는 것이 가능하다.

 

=> 인터페이스를 구현한다는 것은 추상메소드를 완성한다는 것과 같다.


인터페이스의 장점

  • 두 객체 간의 '연결, 대화, 소통' 을 돕는 중간역할을 한다.
  • 선언(껍데기)과 구현(알멩이)을 분리시킬 수 있게 한다.
  • 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다. (느슨한 결합)

      => 변경에 유리하다, 유연한 코드가 된다.

  • 개발시간 단축
  • 표준화가 가능하다. ex) JDBC

서로 관계없는 클래스들의 관계를 맺어줄 수 있다.


default 메소드와 static메소드 (JDK 1.8이후 부터)

  • 인터페이스에 새로운 메소드(추상메소드)를 추가하기 어려움을 해결하기 위해 생김. 

      => 인터페이스를 구현한 하위 클래스에 일일히 추가해서 오버라이딩 해야하기 떄문에..

  • 디폴트 메소드는 인스턴스 메소드(인터페이스 원칙위반)
  • 디폴트 메소드가 기존의 메소드와 충돌할 때의 해결책

1. 여러 인터페이스의 디폴트 메소드간의 충돌

   : 인터페이스를 구현한 클래스에서 디폴트 메소드를 오버라이딩해야 한다.

2. 디폴트 메소드와 조상 클래스의 메소드간 충돌

   : 조상 클래스의 메소드가 상속(우선)되고, 디폴트 메소드는 무시된다.

 

=> 충돌하면 그냥 직접 다 오버라이딩 하자!!!!!

 

 

'*JAVA*' 카테고리의 다른 글

[java] API - java.lang 패키지  (0) 2021.11.16
[java] 예외(Exception)  (0) 2021.10.30
[java] 추상클래스(abstract)  (0) 2021.10.29
[java] instanceof  (0) 2021.10.29
[java] 다형성  (0) 2021.10.27