CHAPTER 7. (8) 인터페이스란? ★
인터페이스
- 기획서
- 일종의 추상 클래스 (다른 클래스 작성 시 도움 주기 위한 목적)
- 추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높음
- 오직 추상 메서드와 상수만을 가짐 (일반 메서드, 멤버 변수 불가)
- 접근 제어자로 public , default만 가능
조건
- 모든 변수는 public static final (생략 가능)
- 모든 메서드는 public abstract (생략 가능)
ㄴ 왜? 모든 멤버에 예외없이 적용되는 사항이기 때문
(생략된 제어자는 컴파일 시 컴파일러가 자동으로 추가함)
특징
- 인터페이스로부터만 상속 받음
- 다중 상속 가능 (여러 인터페이스로부터 상속 받기 가능 - 클래스와 차이점)
★
ex.
Fightable f = (Fightable)new Fighter();
= Fightable 인터페이스를 Fighter 클래스가 구현 시, Fighter 인스턴스를 Fightable타입 참조변수로 참조 가능
★
ex.
void attack(Fightable f) {}
인터페이스 타입의 매개변수가 갖는 의미 (Fightable f)
= 메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야 한다는 뜻
장점
- 개발시간 단축 (메서드 내용 상관없이 선언부만 알면 되기 때문)
- 표준화 가능 (기본 틀 인터페이스로 작성 후, 일관되고 정형화된 프로그램 개발 가능)
- 독립적 프로그래밍 가능 (클래스 선언, 구현 분리로 실제구현에 독립적인 프로그램 작성 가능)
인터페이스가 가지는 것
ㄴ 클래스 변수(상수)
ㄴ 추상메서드
인터페이스 목적
- 구현 클래스가 구현할 메서드의 표준(규격)을 정의
- 결합도를 느슨하게 하기위해서
클래스-클래스 : 상속관계, 포함관계
인터페이스-인터페이스 : 상속관계
인터페이스-클래스 : 구현관계
// monitor.display() 실행 시
// 실제 멤버변수에 조립된 객체가 NormalMonitor일 때 // 컬러로 동영상 재생
// HDMonitor일 때 // 4K 화질로 동영상 재생
// CinemaMonitor일 때 // 100인치 화면에서 동영상 재생
// LCDCMonitor일 때 // 터치 가능한 100인치 화면에서 동영상 재생
/*
★ 다형성 (polymorphism)
1. 부모 (클래스) 타입의 참조변수로 자식 (클래스) 타입 인스턴스를 참조 가능
2. 실행하는 메서드는 동일하지만, 부모 타입의 참조 변수에 따라 실제로 조립된 객체의 재정의(오버라이딩)된 내용 실행
: 실행하는 메서드 동일, 실제 조립된 객체에 따라 다른 실행결과 발현됨
*/