티스토리 뷰
이것이 자바다 1권 8장 인터페이스 TIL
🔥 타입 변환과 다형성
-
프로그램 소스 코드는 변함이 없는데, 구현 객체를 교체함으로써 프로그램의 실행 결과가 다양해진다. 이것이 인터페이스의 다형성이다.
-
A클래스에 문제가 생겨 B클래스로 교체해야할 때, 메소드 선언부를 완전히 동일하게 설계할 수 있는가?
-
이 문제를 해결하려면 인터페이스를 작성하고, A,B 클래스는 구현 클래스로 작성하면 된다.
-
🔥 자동 타입 변환(Promotion)
-
구현 객체가 인터페이스 타입으로 변환되는 것은 자동 타입 변환에 해당한다.
-
자동 타입 변환은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.
-
자동 타입 변환을 통해 필드의 다형성과 매개 변수의 다형성을 구현할 수 있다.
인터페이스 변수 = 구현객체;
//구현객체가 인터페이스 타입으로 자동 타입 형변환 된다.
🔥 강제 타입 변환(Casting)
- 구현 객체가 인터페이스 타입으로 자동 변환하면, 인터페이스에 선언된 메소드만 사용 가능하다.
- 하지만 경우에 따라서는 구현 클래스에 선언된 필드와 메소드를 사용해야 할 경우가 발생한다.
구현클래스 변수 = (구현클래스) 인터페이스변수;
//강제 타입 변환
>> 따라서 강제 타입 변환을 해서 다시 구현 클래스 타입으로 변환 한 다음, 구현 클래스의 필드와 메소드를 사용할 수 있다.
🔥 인터페이스 배열로 구현 객체 관리
Tire[] tires = {
new HankookTire(),
new HankookTire(),
new HankookTire()
};
tires[1] = new KumhoTire();
//인덱스로 표현하여 교체할 수 있다.
🔥 객체 타입 확인(instanceof)
- 인터페이스 타입으로 자동 변환된 매개값을 메소드 내에서 다시 구현 클래스 타입으로 강제 타입 변환해야 한다면 반드시 매개값이 어떤 객체인지 instanceof 연산자로 확인하고, 안전하게 변환해야 한다.
public class Driver{
public void drive(Vehicle vehicle){
if(vehicle instanceof Bus){ //vehicle 매개변수가 참조하는 객체가 Bus인지 조사
Bus bus = (Bus)vehicle; //Bus 객체일 경우 안전하게 강제 타입 변환
bus.checkFare();
}
vehicle.run();
}
}
🔥 인터페이스 상속
- 인터페이스는 클래스와는 달리 다중 상속을 허용한다.
public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2{...}
-
하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메소드뿐만 아니라 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다.
-
구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다.
하위인터페이스 변수 = new 구현클래스(...);
상위인터페이스1 변수 = new 구현클래스(...);
상위인터페이스2 변수 = new 구현클래스(...);
>> 하위 인터페이스로 타입 변환이 되면 상, 하위 인터페이스에 선언된 모든 메소드를 사용할 수 있다.
>> 상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언된 메소드만 사용 가능하고, 하위 인터페이스에 선언된 메소드는 사용할 수 없다.
'☕️JAVA' 카테고리의 다른 글
이것이 자바다 1권 9장 중첩 클래스 & 중첩 인터페이스 TIL 정리 - 1 (4) | 2019.12.01 |
---|---|
이것이 자바다 1권 8장 확인문제 풀이 (0) | 2019.11.26 |
이것이 자바다 1권 8장 인터페이스 TIL 정리 - 1 (0) | 2019.11.25 |
[JAVA] 이것이 자바다 1권 6장 확인문제 20번 풀이 (0) | 2019.11.19 |
[JAVA] 클래스(Class)관련 TIL 정리 1 (1) | 2019.11.12 |