인터페이스란?
사전적 의미로는 두 장치를 연결하는 접속기를 말한다.
자바에서는 인터페이스를 통해 여러 개의 객체가 서로의 가지고 있는 필드나 메소드를 사용할 수 있도록 한다.
인터페이스를 이용함으로써 자바에서 다형성을 구현한다. (상속보다 인터페이스를 더 많이 활용한다. 특히 spring!)
인터페이스 선언
public interface 인터페이스명 {
}
추상 클래스는?
public abstract class 추상클래스명 {
}
- 추상 클래스는 class이기 때문에 키워드에 class가 들어간다.
- 추상 클래스를 상속받은 클래스는 생성자를 선언해야 한다.
- 추상 클래스 내부에 선언된 메소드는 내용이 있을 수도, 없을 수도 있다.
- 내용이 있다면 일반 메소드로 선언하고,
- 내용이 없다면 abstract키워드를 붙혀서 추상 메소드로 구현해야 한다.
- 추상 메소드는 상속 받은 클래스에서 무조건 구현해야한다.
👩💻 **[실습코드]**
`package com.lec.interfa;` : 인터페이스 상속 받아 클래스만들기
인터페이스 구현 클래스 선언
public class B implements 인터페이스명 {
...
}
- 인터페이스에서 선언한 추상 메소드를 재정의 해야 한다.
인터페이스의 상수 필드
[public static final] 타입 상수명 = 값;
- 인터페이스 내부에 선언된 필드(변수)는
무조건 상수가 된다. → 키워드를 생략해도 자동으로 적용된다.
- 상수이기 때문에 이름은 대문자로만 작성해야 한다.
디폴트 메소드
[public] default 리턴타입 메소드명(매개변수, ...) { ... }
- 인터페이스에서는 추상 메소드의 선언부만 선언할 수 있지만,
디폴트 메소드를 사용하여 내용을 구현할 수 있다.
- 디폴트 메소드를 구현할 때는 default 키워드를 리턴 타입 앞에 적어야 한다.
- 인터페이스를 구현한 클래스에서 디폴트 메소드를 오버라이딩(재정의)할 수 있다.
- 오버라이딩 주의할 점
- public 접근자를 반드시 붙힌다.
- default 키워드를 생각한다.
- 자바 8부터 디폴트 메소드를 사용할 수 있게 되었다.
👩💻 **[실습코드]**
`package com.lec.interfa2;` : 추상메소드, 디폴트 메소드, 정적 메소드
매개 변수 타입이 인터페이스라면?
아래 코드처럼 express메서드가 정의되어 있을 때, 이 메서드의 매개변수로 가능한 것이 무엇일까?(=‘Emotion 인터페이스타입의 매개변수로 가능한 것이 무엇인가?’)
interface Emotion {
void situation(int x, int y);
}
void express(Emotion e) {
}
- 한 가지는 null 이며,
- Emotion 인터페이스를 구현한 클래스 또는 그 자손의 인스턴스이다.