[JAVA] 인터페이스(Interface)

임유빈·2022년 7월 19일
0

JAVA

목록 보기
11/17
post-thumbnail

1. 인터페이스(Interface)

(1) 개념

상수 필드 선언

• 인터페이스는 상수 필드만 선언 가능 : 데이터 저장하지 않음
• 인터페이스에 선언된 필드는 모두 public static final
: 자동적으로 컴파일 과정에서 붙음
• 상수명은 대문자로 작성
: 서로 다른 단어로 구성되어 있을 경우에는 언더 바(_)로 연결
• 선언과 동시에 초기값 지정
: static { } 블록 작성 불가 - static {} 으로 초기화 불가

(2) 추상 메소드 선언


인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행된다. 인터페이스의 메소드는 기본적으로 실행 블록이 없는 추상 메소드로 선언한다.

(3)디폴트 메소드 선언

자바8에서 추가된 인터페이스의 새로운 멤버로 실행 블록을 가지고 있는 메소드이다. default 키워드를 반드시 붙여야하며, 기본적으로 public 접근 제한을 가지고 있다.

(4) 정적 메소드 선언

2. 인터페이스(Interface) 구현

(1) 개념

  • 구현 객체와 구현 클래스
    인터페이스의 추상 메소드 대한 실체 메소드를 가진 객체 = 구현 객체

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

(2) 구현 클래스 선언


자신의 객체가 인터페이스 타입으로 사용할 수 있다.
• implements 키워드로 명시

  • 추상 메소드의 실체 메소드를 작성하는 방법
    메소드의 선언부가 정확히 일치해야 하며, 인터페이스의 모든 추상 메소드를 재정의하는 실체 메소드 작성해야 한다,
  • 일부만 재정의할 경우, 추상 클래스로 선언 + abstract 키워드를 붙인다.

(3) 익명 구현 객체


이름 없는 구현 클래스 선언과 동시에 객체 생성, 인터페이스의 추상 메소드들을 모두 재정의하는 실체 메소드가 있어야 한다. (인터페이스 변수로 접근 불가)

• 추가적으로 필드와 메소드 선언은 가능하지만 익명 객체 안에서만 사용한다.

(4) 다중 인터페이스 구현 클래스

인터페이스에 구현 객체를 대입하는 방법

(5) 메소드 사용

  • 추상 메소드 사용

  • 디폴트 메소드 사용
    인터페이스만으로는 사용이 불가하다.
    구현 객체가 인터페이스에 대입되어야 호출할 수 있는 인스턴스 메소드다.

  • 모든 구현 객체가 가지고 있는 기본 메소드로 사용
    필요에 따라 구현 클래스가 디폴트 메소드 재정의해 사용한다.

  • 정적 메소드 사용
    인터페이스로 바로 호출 가능

3. 타입변환과 다형성 (자세한 건 JAVA 상속 글 참조)

(1) 자동 타입 변환(Promotion)

(2) 필드의 다형성

(3) 인터페이스 배열로 구현한 객체 관리

(4) 매개변수의 다형성

매개 변수의 타입이 인터페이스인 경우
• 어떠한 구현 객체도 매개값으로 사용이 가능하다.

• 구현 객체에 따라 메소드 실행결과 달라짐

(5) 강제 타입 변환(Casting)

인터페이스 타입으로 자동 타입 변환 후, 구현 클래스 타입으로 변환
• 필요성: 구현 클래스 타입에 선언된 다른 멤버 사용하기 위해

(6) 디폴트 메소드와 인터페이스 확장

  • 디폴트 메소드가 있는 인터페이스 상속
    부모 인터페이스의 디폴트 메소드를 자식 인터페이스에서 활용 방법

  • 디폴트 메소드를 단순히 상속만 받는다.

  • 디폴트 메소드를 재정의(Override)해서 실행 내용을 변경한다.

  • 디폴트 메소드를 추상 메소드로 재선언 한다.

0개의 댓글