상세 컨텐츠

본문 제목

JAVA 10. 인터페이스

Backend/JAVA-자바

by 사랑짱 2021. 6. 17. 20:14

본문

 

◆ 인터페이스란?

- 개발자의 코드와 객체가 통신하는 접점

- 객체 사용 설명서 (여러 객체가 사용가능)

 

출처 : 이것이 자바다

 

 

◆ 인터페이스의 구성멤버

- 인터페이스의 모든 멤버는 public  이다!!!

 

1. static fiinal 상수

- 선언과 동시에 초기값 지정 (static initializer 작성 불가!)

- 선언된 필드는 모두 'public static final'로 컴파일 

  (하지만 컴파일러가 대신 넣어준다고 해서 생략하지 않도록 하자!!)

 

2. 추상메소드(규격★)

- 실행블록(구현부)이 없는 메소드

- 모든 추상메소드는 'public abstract'로 컴파일

- 추상메소드는 규격이자 자식타입(구현 클래스)에서

   반드시 재정의해야하는 강제성을 부여하는 수단

 

3. 디폴트메소드

- 모든 구현 객체가 가지고 있는 기본 메소드 사용

- 구현 객체가 인터페이스에 대입되어야 호출할 수 있는 인스턴스 메소드 (-> 자식타입의 객체 소속)

- 모든 디폴트메소드는 'public default' 키워드를 반드시 붙여야 한다!!

  (public 은 생략되도 컴파일 과정에서 자동 생성)

- 기능의 확장을 위해 자바 8부터 추가

 

※ 기능 확장을 하려면 모든 구현클래스에 새롭게 정의된 추상메소드를 모두 구현해야한다.

    때문에 구현클래스를 건드리지 않고도 기능을 확장하기 위해 인터페이스의 멤버로 추가!!!

 

But, 디폴트 메소드가 오버라이딩 되어있는 경우, 인터페이스에 있는 디폴트메소드가 수정되었을 때

      컴파일 오류가 발생하기 때문에 인터페이스다운 기능이 아니라고 볼 수 있다!!!

      현업에서는 지양!!

 

4. 정적 메소드

- 모든 객체가 공유하는 메소드

- 인터페이스로 바로 호출 가능(정적메소드 -> 인터페이스의 클래쯔객체 소속)

- 강제성을 구현하지 않고, 구현클래스에서 필요에 따라 사용가능한 기능을 확장

- 모든 정적 메소드는 'public static' 키워드를 가짐.

 

 

인터페이스의 구성멤버에 대한 코드는 아래를 참고하면 된다!

 

 

 

◆ 인터페이스의 사용목적

- 구현 객체의 같은 동작을 보장하기 위함(추상메소드를 통한 규격화)

- 개발코드가 객체에 종속되지 않도록 하여 객체를 교체할 수 있도록 하기 위함

- 개발 코드 변경 없이 어떤 객체가 사용하느냐에 따라 리턴값 또는 실행 내용이 다양 (다형성)

 

 

구현 객체와 구현 클래스

- 구현 객체 : 인터페이스의 추상메소드에 대한 실체 메소드를 가진 객체

- 구현 클래스 : 구현 객체를 생성하는 클래스

 

※ 인터페이스의 일부만 재정의하는 경우 추상클래스로 선언

 

 

  인터페이스의 다중상속

인터페이스는 추상클래스와 달리 다중상속이 가능하다!!

 

방법1.

여러 인터페이스를 상속받는 인터페이스를 implement 하여 여러 인터페이스의 추상메소드를 구현

(인터페이스 간 상속에 대해서는 extends 키워드를 사용한다!!)

 

방법2. 

각각의 인터페이스를 implements 받아여러 인터페이스의 추상메소드를 구현

 

 

 

관련글 더보기