자바는 단일 상속이 원칙이다.
하지만 다중 상속을 지원하기 위해서 인터페이스가 존재한다.
인터페이스는 오로지 상수(final) 와 추상 메서드만 갖을 수 있다.
(추상 클래스보다 더 추상화 정도가 높다.)
인터페이스 특징
1. 인터페이스의 구조
interface 인터페이스명{
public static final int a = 3; // 필드는 상수
public abstract void disp(); // 추상 메서드만 존재
}
상수와 추상 메서드 만으로 구성이 되어있다. 생략하면, 컴파일러가 자동으로 삽입해준다.
모든 필드 : public static final (*필드는 선언과 동시에 초기화 되어야 한다.)
모든 메서드 : public abstract (상속받는 자식은 오버라이딩이 강제된다.)
2. 다중상속을 지원한다.
자식 클래스는 여러 개의 인터페이스를 상속 받을 수 있다.
class MyPet implements Cat, Dog { //implements interface1, interface2
3. 생성자 생성 불가능
디폴트 생성자와 매개변수 생성자 모두 생성이 불가능하다.
인터페이스의 상속과 구현
추상 클래스와 마찬가지로 인터페이스에서는 객체를 생성할 수 없다.
자식 클래스를 만들고, 오버라이딩하여 구현한다.
(추상 클래스와 마찬가지로 익명 이너 클래스로도 구현이 가능하다.)
* 인터페이스명.super.메서드명() 을 통해서 기본 메서드에 접근이 가능하다.
interface A{
final static int a=0; //상수 필드
public abstract void disp(); //추상 메소드
}
interface B{
final static int a=0;
public abstract void disp1();
}
interface C extends A, B { // 다중상속 가능
final static int a = 0;
public abstract void disp2();
}
디폴트 메서드 & 정적 메서드
원래 인터페이스는 상수와 추상 메서드만 존재할 수 있다고 했다.
하지만 자바8 버전부터 디폴트 메서드와 정적 메서드를 사용할 수 있도록 되었다.
인터페이스에서 디폴트 메서드를 허용하는 이유는 '하위 호완성' 때문이다. 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서 추상 메서드를 하나 더 정의하면 기존에 인터페이스를 사용하고 있던 모든 코드를 수정해야 하기 때문에 불편하다.
디폴트 메서드는 추상 메서드가 구현 클래스에서 실체 메서드로 구현되어야 한다는 제약을 없애준 편의 메서드로 볼 수 있다.
인터페이스의 장점
인터페이스를 사용하면 다중 상속이 가능할 뿐만 아니라 다음과 같은 장점을 가질 수 있습니다.
1. 인터페이스는 메서드의 틀을 미리 만들어 개발자 간의 의사소통 혼선을 줄일 수 있다.
2. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능하다.
3. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.
4. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.
참고 문헌 : Do it! 자바 완전정복
http://www.tcpschool.com/java/java_polymorphism_interface
'Java > 자바 이론' 카테고리의 다른 글
[Java] 자바 쓰레드(Thread) & 동기화 (0) | 2022.07.06 |
---|---|
[Java] 자바 내부 클래스 4종류 (Inner Class) (0) | 2022.07.05 |
[Java] 추상 클래스와 추상 메서드 (abstract) (0) | 2022.07.04 |
[Java] 메서드 오버로딩과 오버라이딩 (1) | 2022.06.30 |
[Java] 자바 super 키워드 & super() 메서드 (0) | 2022.06.30 |