티스토리 뷰

이것이 자바다 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 구현클래스(...);

>> 하위 인터페이스로 타입 변환이 되면 상, 하위 인터페이스에 선언된 모든 메소드를 사용할 수 있다.

>> 상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언된 메소드만 사용 가능하고, 하위 인터페이스에 선언된 메소드는 사용할 수 없다. 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30