인터페이스
- 객체의 사용 방법을 정의한 타입
- 개발 코드와 객체가 서로 통신하는 접점역할을 함
- 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출
- 구성 멤버 : 상수 필드, 추상 메소드
인터페이스는 필드 선언 불가 (상수 필드 가능)
상수 필드 : 인터페이스의 상수 필드는 기본적으로 public, static, final 특성을 갖음
관례적으로 필드 이름은 모두 대문자로 작성, 선언 시 초기값을 대입
인터페이스도 일반 동작을 정의하는 메소드(default 메소드) 가능
ex) default int getVolume() { }
필드 : 객체 선언 시 같거나, 상위 클래스
추상 메소드 : 인터페이스에 선언된 메소드는 public abstract가 생략되고 메소드 선언부만 있음
구현 클래스는 반드시 추상 메소드를 재정의해야 함
추상 메소드 선언
- 인터페이스 통해 호출되는 메소드는 최종적으로 객체에서 실행
- 인터페이스의 메소드는 실행 블록 필요 없는 추상 메소드로 선언
- 추상 메소드는 리턴 타입, 메소드 이름, 매개 변수만 기술되고 중괄호 { }를 붙이지 않는 메소드
- 인터페이스에 선언된 추상 메소드는 모두 public abstract의 특성을 갖기 때문에
public abstract를 생략하더라도 컴파일 과정에서 자동으로 붙음
extends : 확장
implements : 동작하는 메소드가 없기 때문에 선언된 메소드를 반드시 재정의 해야함
구현 클래스는 어떤 인터페이스로 사용 가능한지(어떤 인터페이스를 구현하고 있는지)를
기술하기 위해 클래스 선언 시 implements 키워드 사용
방법 1. public class Television implements RemoteControl 입력 후 에러 부분에서
Add unimplemented methods 클릭
방법 2. 클래스 생성 시 클래스명 작성 후 Interfaces : add 클릭 후 interface명 검색 후 finish
인터페이스 사용 : 클래스 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는
메소드의 로컬 변수로 선언될 수 있음
- 인터페이스가 필드 타입으로 사용될 경우 : 필드에 구현 객체를 대입
- 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우 : new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있음
- 인터페이스가 로컬 변수 타입으로 사용될 경우 : 변수에 구현 객체를 대입할 수 있음
- 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우 : 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있음
대입된 후에는 재정의된 구현 객체의 메소드를 호출할 수 있음
인터페이스 타입 변환과 다형성
자동 타입 변환 : 구현 객체가 인터페이스 변수에 대입되는 것
다형성 : 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이라는 개념상의 차이는 있으나, 둘 다 다형성을 구현하는 방법은 비슷함. 모두 재정의와 타입 변환 기능을 제공
강제 타입 변환 : 인터페이스에 대입된 구현 객체를 다시 원래 구현 클래스 타입으로 변환하는 것
instanceof : 강제 타입
'IT > 자바' 카테고리의 다른 글
자바 정리 - 익명객체, 예외처리 (0) | 2021.11.30 |
---|---|
자바 정리 - 중첩클래스(nested class) (0) | 2021.11.30 |
자바 정리 - 추상 클래스 (0) | 2021.11.30 |
자바 정리 - 타입 변환과 다형성 (0) | 2021.11.30 |
자바 정리 - 상속 (0) | 2021.11.30 |
댓글