<인터페이스의 장점>
- 인터페이스만 준수하면 통합에 신경쓰지 않고, 다양한 형태로 새로운 클래스 개발 가능
- 클래스의 다중 상속 지원하지 않지만, 인터페이스로 다중 상속효과를 간접적으로 얻을 수 있다.
<인터페이스 vs 추상클래스>
분류 | 인터페이스 | 추상클래스 |
구현 메서드 | 포함불가(단, 디폴트 메서드와 정적메서드는 예외) | 포함가능 |
인스턴스 변수 | 포함 불가능 | 포함가능 |
다중상속 | 가능 | 불가능 |
디폴트 메서드 | 선언 가능 | 선언 불가능 |
생성자와 main() | 선언 불가능 | 선언 가능 |
상속에서의 부모 | 인터페이스 | 인터페이스,추상 클래스 |
접근 범위 | 모든 멤버를 공개 | 추상메서드를 최소한 자식에게 공개 |
인터페이스는 인스턴스 생성 불가능, 생성자도 당연히 없음!
<인터페이스 구조>
interface 인터페이스 이름{
//상수이름
//abstract 메서드
//default 메서드
//static 메서드
//private 메서드
}
인터페이스의 모든 필드
public static final을 포함
<default 메서드>
default 반환타입 디폴트 메서드 이름(){}
- 인터페이스 사용하려면 인터페이스 구현한 클래스 작성해야함.
- 기존 인터페이스에 새로운 기능 추가할 수 있도록 디폴트 메서드 사용가능
- 디폴트 메서드 사용하면 기존의 메서드 변경하지 않아도 자유롭게 수정 가능(기존에는 인터페이스의 수정사항이 생기면 모든 인터페이스를 일일이 수정했어야)
- 인터페이스를 구현하는 클래스에 자동 상속
- public 접근지정만 허용, 생략가능하다.
- 오버라이딩 될 수 있다(정적메서드는 불가능)
==> 정리하자면 원래 인터페이스는 메서드 구현을 못하는데, default 메서드만 메서드내부 구현이 가능하다는거!
<인터페이스 상속>
- extends 키워드 (인터페이스 상속)
interface 자식인터페이스 extends 부모인터페이스{}
interface 자식 인터페이스 ecxtedns 부모 인터페이스1, 부모 인터페이스2{}
- implements 키워드 (인터페이스 구현)
class 자식클래스 implements 부모 인터페이스{}
class 자식 클래스 implements 부모 인터페이스1,부모 인터페이스2{}
인터페이스 다중상속
class 자식클래스 extends 부모클래스 implements 부모 인터페이스 1, 부모 인터페이스2{}
<인터페이스에서 defualut 메소드와 static 메소드>
default 메소드 | static메소드 |
- 인터페이스에서 메소드 구현 가능 - 참조변수로 함수 호출 가능 - 오버라이딩 가능 |
- 인터페이스에서 메소드 구현 가능 - 반드시 클래스 명으로 메소드 호출해야 - 오버라이딩 불가능 |
<인터페이스 타입>
- 인터페이스도 클래스처럼 하나의 타입이므로 변수를 인터페이스 타입으로 선언 가능
- 인터페이스의 구현 클래스는 그 인터페이스의 자식 타입
인터페이스타입 변수 = 구현객체
- 인터페이스 타입변수가 구현 객체를 참조한다면 강제 타입변환 가능
구현클래스 타입 변수=(구현 클래스 타입) 인터페이스타입 변수
인터페이스 타입 변수--> 인터페이스 구현 객체를 참조하는 변수
<인터페이스 응용 예제>
Controllable.reset()이 가능한건 인터페이스는 객체를 생성하지 않기 때문
'Java > 기초' 카테고리의 다른 글
[java기초] 패키지 (0) | 2021.07.02 |
---|---|
[java 기초] 인터페이스와 다형성 (0) | 2021.06.30 |
[java기초] 추상 메서드 (0) | 2021.06.30 |
[java 기초] 타입변환과 다형성 (0) | 2021.06.30 |
[java기초] final 메서드 (0) | 2021.06.30 |
댓글