인터페이스
- 개발 코드와 객체가 서로 통신하는 접점 역할
- 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출
- 개발 코드를 수정하지 않고 사용하는 객체를 변경할 수 있음
- 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있음
인터페이스 선언
[public] interface 인터페이스이름 {...}
- 인터페이스 선언은 class 키워드 대신에 interface 키워드 사용
- 인터페이스는 상수 필드와 추상 메소드만을 구성 멤버로 가짐
- 객체를 생성할 수 없기 때문에 생성자를 가질 수 없음
interface 인터페이스이름 {
//상수
타입 상수이름 = 값;
//추상 메소드
타입 메소드이름(매개변수, ...);
}
상수 필드(constant field) 선언
- 인터페이스에 고정된 값으로 실행시에 데이터 변경 불가능
[public static final] 타입 상수이름 = 값;
추상메소드 선언
- 인터페이스의 메소드는 실행 블록이 필요 없는 추상 메소드로 선언
- 추상 메소드는 리턴 타입 메소드 이름, 매개 변수만 기술되고 중괄호 {} 를 붙이지 않는 메소드
인터페이스 구현
- 인터페이스 메소드를 호출하면 인터페이스는 객체의 메소드를 호출함
- 객체는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가져야함 -> 구현 객체(implement object), 구현 객체를 생성하는 클래스는 구현 클래스
구현 클래스
- 클래스 선언 부에 Implements 키워드를 추가하고 인터페이스 이름을 명시
- 인터페이스에 선언된 추상 메소드의 실체 메소드를 선언해야 함
public class 구현클래스이름 Implements 인터페이스이름 {
//인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
- 구현 클래스가 작성되면 new 연산자로 객체를 생성할 수 있음
- 인터페이스로 구현 객체를 사용하려면 인터페이스 변수 선언 후 구현 객체를 대입
- 인터페이스 변수는 참조 변수로 구현 객체가 대입될 경우 구현 객체의 번지를 저장
다중 인터페이스 구현 클래스
- 다중 인터페이스를 구현하는 경우, 구현 클래스는 모든 인터페이스의 추상메소드에 대해 실체 메소드를 작성해야 함
인터페이스 사용
- 클래스를 선언할 때 인터페이스는 필드, 생성자, 또는 메소드의 매개변수, 생성자 또는 메소드의 로컬 변수로 선언 될 수 있음
1. 인터페이스가 필드타입으로 사용 -> 필드에 구현 객체를 대입 가능
2. 인터페이스가 생성자의 매개 변수 타입으로 사용 -> new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입 가능
3. 인터페이스가 로컬 변수 타입으로 사용 -> 변수에 구현 객체를 대입할 수 있음
4. 인터페이스가 로컬 매개 변수 타입으로 사용될 경우 ->메소드 호출 시 구현 객체를 매개값으로 대입 가능
- 구현 객체가 인터페이스 타입에 대입되면 인터페이스에 선언된 추상 메소드를 개발 코드에서 사용 가능
확인문제
- 인터페이스는 객체 사용 방법을 정의해놓은 타입이다 (o)
- new 연산자를 이용해서 인터페이스 객체를 만들 수 있다 (x)
- 인터페이스는 상수 필드와 추상 메소드를 갖는다 (o)
- 구현 클래스는 Implements 키워드로 인터페이스를 기술해야 한다 (o)
- 클래스를 선언할 때 인터페이스 타입의 필드를 선언할 수 있다 (o)
- 생성자의 매개 타입이 인터페이스일 경우 매개값으로 구현 객체를 대입한다 (o)
- 인터페이스 타입의 로컬 변수는 선언할 수 없다 (x)
- 메소드의 매개 타입이 인터페이스일 경우 매개값으로 구현 객체를 대입한다 (o)
'Java > 혼자 공부하는 자바' 카테고리의 다른 글
혼자공부하는자바 9-1 중첩 클래스와 중첩 인터페이스 소개 (0) | 2022.12.07 |
---|---|
혼자공부하는자바 8-2 타입 변환과 다형성 (0) | 2022.12.05 |
혼자공부하는자바 7-3 추상 클래스 (0) | 2022.12.03 |
혼자공부하는자바 7-2 타입 변환과 다형성 (0) | 2022.11.30 |
혼자공부하는자바 7-1 상속 (0) | 2022.11.30 |