Interface
- 메서드: 일반 메서드는 없이 전부 추상 메서드(public abstract)로만 구성한다
- 속성: 일반 멤버 필드는 없고 public static final로 선언된 상수만 있다
- 직접 객체를 생성하는 것은 불가능하고, implements 키워드를 이용하여 다른 클래스로 구현할 때에는 객체 생성이 가능하다
- 구현된 클래스에서는 반드시 추상 메서드를 재정의해야 한다
- abstract 예약어를 사용하지 않아도 추상 메서드로 인식한다
- 다중 상속을 지원한다
- 생성자 사용이 불가능하다
1. 인터페이스 용도
1) 낮은 결합도 유지 (Business Component 개발의 원칙 중 하나)
- OOP 특성 중 다형성 구현에 인터페이스를 사용하여 결합도를 낮춘다
- 인터페이스 선언, 상속(구현), 메서드 재정의, 형변환의 순으로 구현한다
한 메서드를 수정하였을 때, 다른 메서드도 수정해야 하는 상황을 줄여준다.
2) 설계 사상을 코딩단계에서 구현한다
- 인터페이스를 implements하게 되면 추상 메서드를 의무적으로 재정의(overriding)해야 하므로 설계단계에서 인터페이스를 통해 정의한 내용을, 코딩단계에서 클래스로 구현되도록 강제할 수 있으므로 산업현장에서 사용한다
2. 사용 예시 - Remocon
전자기기 각각을 켜고, 끄는 기능이 있다
1) 인터페이스는 생성자를 사용할 수 없으며 객체를 생성 할 수 없다
2) UpCasting을 통해 객체를 생성할 수 있다
3) 각 UpCasting한 클래스에서 Overriding한 메서드를 사용할 수 있다
4) 메서드를 통해 UpCasting 하는 경우
메서드를 좀 더 범용적으로 사용할 수 있다
5) 인터페이스에 추상 메서드 추가하기
5-1) 추상 메서드 setVolumn(), getVolumn() 추가
5-2) 추상 메서드 구현
5-3) 실행 결과
6) TV 클래스를 상속받는 SmartTv 클래스, Browser 인터페이스를 생성 및 구현
3. 사용 예시 - 차&타이어
- 한국 타이어와 금호 타이어 클래스가 타이어 인터페이스를 구현
- Car 클래스에서 타이어 인터페이스 배열 참조 변수를 선언만하고 생성자 호출 때 한국 타이어로 구현하도록 설계
- TireChange를 통해 금호 타이어로 값을 변경하도록 설계
4. 인터페이스 다중상속
- 클래스 하나를 콤마로 구분해서 인터페이스 하나 이상을 상속하는 것을 의미한다
- 다중 상속은 인터페이스만 가능하다
- 추상 클래스라도 다중 상속은 지원하지 않는다
1) 추상 클래스는 왜 다중 상속이 안되는가?
- 상위 클래스로부터 같은 메서드나 속성을 상속받을 때 발생할 수 있는 모호성이나 충돌 문제가 있다
2) 인터페이스는 어떻게 다중 상속을 구현될 수 있는가?
- 인터페이스는 실질적인 구현이 이루어지지 않고 메서드에 대한 선언만 하고 있기 때문에 위처럼 메서드가 겹치더라도 최종 구현 부분은 구현 객체에서 이루어져 interface는 다중 상속이 가능하다.
3) 인터페이스 다중 상속 실습
- 인터페이스 A, B에 대해 클래스 G가 구현하고있다
- 추상 메서드 a를 클래스 G에서 구현하였다
인터페이스에서는 추상 메서드에 대한 선언만 되었기 때문에 구현 클래스에서 추상 메서드를 구현한다면 동일한 기능으로 사용할 수 있다
4) 추상 클래스 다중 상속은 지원하지 않는다
- 추상 클래스에 대해 다중 상속을 할려고 하면 문법 오류가 발생한다
- 같은 이름의 멤버에 대해 충돌 오류가 발생할 수 있어 지원하지 않는다
5. 인터페이스끼리의 상속
인터페이스끼리도 상속을 통해서 확장을 시켜나갈 수 있고 하위 인터페이스에서 네이밍을 강제하여 객체 간의 통일성을 추구할 수 있다. 인터페이스로 객체를 구현할 때는 implements라는 키워드를 쓰지만 인터페이스끼리 상속을 할 때는 클래스와 마찬가지로 extends 키워드를 사용한다.
출처
https://coding-factory.tistory.com/867
[Java] 자바 인터페이스(Interface) 사용법 & 예제
인터페이스(Interface)란? 자바에서 인터페이스는 클래스들이 필수로 구현해야 하는 추상 자료형입니다. 쉽게 말하자면 객체의 사용방법을 가이드라인 하는 것이라고 생각하시면 이해가 쉽습니다
coding-factory.tistory.com