인터페이스
- 객체의 사용 방법을 정의한 타입
- 개발 코드와 객체가 서로 통신하는 접점 역할
개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.
=> 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됨
인터페이스 선언
인터페이스 선언은 class 키워드 대신에 interface 키워드를 사용
[public] interface 인터페이스이름 { ••• }
# 인터페이스 이름 작성 방법
- 영어 대소문자 구분
- 첫 글자 대문자
- 나머지 소문자
interface 인터페이스이름 {
//상수
타입 상수이름 = 값;
//추상 메소드
타입 메소드이름(매개변수,…);
}
- 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.
상수 필드 선언
- 인터페이스에 고정된값 => 실행 시에 데이터를 바꿀 수 없다.
- 인터페이스의 상수 필드는 기본적으로 public static final 특성을 갖는다.
- 상수는 반드시 선언과 동시에 초기값을 지정해야한다
# 상수 이름 작성 방법
- 대문자로 작성
- 언더바(_)로 연결
관례적으로 필드 이름은 모두 대문자로 작성해야 하며, 선언 시 초기값을 대입해야 합니다.
추상 메소드 선언
- 인터페이스의 메소드는 실행 블록 필요없이 추상 메소드로 선언
- 리턴 타입, 메소드 이름, 매개 변수만 기술되고 중괄호를 붙이지 않는 메소드
- public abstract의 특성을 갖는다 (생략해도 자동으로 붙음)
인터페이스 구현
구현 객체 : 객체는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 하는데 이러한 객체
구현 클래스 : 구현 객체를 생성하는 클래스
구현 클래스
public class 구현클래스이름 implements 인터페이스이름 {
//인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
- 인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다
- 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장한다.
다중 인터페이스 구현 클래스
인터페이스A와 인터페이스B가 객체의 메소드를 호출할 수 있으려면 객체는 이 두 인터페이스를 모두 구현해야한다.
다중 인터페이스를 구현할 경우, 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 실체 메소드를 작성해야 한다.
public class 구현클래스이름 implements 인터페이스A, 인터페이스B {
//인터페이스 A에 선언된 추상 메소드의 실체 메소드 선언
//인터페이스 B에 선언된 추상 메소드의 실체 메소드 선언
}
인터페이스 사용
클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언됨.
- 인터페이스가 필드 타입으로 사용될 경우: 필드에 구현 객체를 대입할 수 있다.
- 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우: new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.
- 인터페이스가 로컬 변수 타입으로 사용될 경우: 변수에 구현 객체를 대입할 수 있다.
- 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우: 메소드 호출 시 구현 객체를 매개값으로 대입할수 있다.
->대입이 된 후에는 재정의된 구현 객체의 메소드를 호출할 수 있습니다.
[확인 문제]
② new 연산자를 이용해서 인터페이스 객체를 만들 수 있다. (X)
나머지는 모두 O
③ 인터페이스 타입의 로컬 변수는 선언할 수 없다.(X)
나머지는 모두 O
package yeong.exam03;
public class Dog implements Soundable {
@Override
public String sound() {
return "멍멍";
}
}
package yeong.exam03;
public class Cat implements Soundable {
©Override
public String sound() {
return "야옹,,;
}
}
'JAVA' 카테고리의 다른 글
중첩 클래스와 중첩 인터페이스 (1) | 2022.11.15 |
---|---|
타입 변환과 다형성 (0) | 2022.11.09 |
추상 클래스 (0) | 2022.10.31 |
타입 변환과 다형성 (0) | 2022.10.31 |
상속 (0) | 2022.10.31 |