• 인터페이스의 다형성 : 프로그램 소스 코드는 변함이 없는데, 구현 객체를 교환함으로써 프로그램의 실행결과가 다양해 지는 것
  • 상속은 같은 종류의 하위 클래스를 만드는 기술이고 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이라는 차이가 있다.
  • 다형성을 구현하는 방법은 비슷하다.

 

자동 타입 변환(Promotion)

  • 자동 타입 변환 : 구현 객체가 인터페이스 변수에 대입되는 것
  • 필드와 매개변수 타입을 인터페이스로 선언하면 다양한 구현 객체를 대입해서 실행결과를 다양하게 만들 수 있다.
  • 인터페이스 변수 = 구현객체;

 

https://hyuntaekhong.github.io/blog/java-basic21/

 

 

다형성

 

https://cloudstudying.kr/lectures/267

 

① 필드의 다형성 : 필드 타입으로 인터페이스를 선언하면 필드값으로 다양한 객체를 대입할 수 있고, 이 객체마다 선언되어 있는 다양한 메소드를 호출할 수 있다. 따라서 기존 클래스의 메소드를 수정하지 않아도, 다양한 메소드의 실행결과를 얻을 수 있게 된다.

 

② 매개 변수의 다형성 : 매개 변수를 인터페이스 타입으로 선언하고 호출할 때에는 구현 객체를 대입한다. 매개 변수의 타입이 인터페이스일 경우 어떠한 구현 객체도 매개값으로 사용할 수 있고, 어떤 구현 객체가 제공되느냐에 따라 메소드의 실행결과는 다양해질 수 있다.

 

 

강제 타입 변환(Casting)

  • 구현 객체가 인터페이스 타입으로 자동 타입 변환하면, 인터페이스에 선언된 메소드만 사용 가능 하다는 제약이 있다.
  • 경우에 따라 구현 클래스에 선언된 필드와 메소드를 사용해야할 경우 강제 타입 변환을 사용한다.
  • 구현클래스 변수 = (구현클래스) 인터페이스 변수;

 

객체 타입 확인

  • 어떤 구현 객체가 인터페이스 타입으로 변환되었는지 확인하는 방법이다.
  • 상속과 마찬가지로 instatnceof 연산자를 사용한다.
  • 구현 객체가 인터페이스 타입으로 변환되어 있는 상태에서 가능하다.
  • 상속에서는 자식 클래스 타입인지, 인터페이스에서는 구현 클래스 타입인지를 확인할 때 사용한다.
  • 어떤 구현 객체가 변환되어 있는지 알 수 없는 상태에서 무작정 강제 타입 변환할 경우 ClassCastException이 발생할 수 있다.
  • 따라서 강제 타입 변환을 해야하는 경우 반드시 매개값이 어떤 객체인지 확인하고 안전하게 변환해야 한다.

 

인터페이스 상속

  • 인터페이스도 다른 인터페이스를 상속할 수 있다.
  • 다중 상속을 허용하지 않는 클래스와는 달리 다중 상속을 허용 한다. 즉, extends 뒤에 상위 인터페이스가 올 수 있다.
  • 하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메소드뿐만 아니라 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다.
  • 하위 인터페이스로 타입 변환이 되면 상위 및 하위 인터페이스에 선언된 모든 메소드를 사용할 수 있지만 상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언되 메소드만 사용할 수 있다.

 

인터페이스 vs 클래스

 

https://www.geeksforgeeks.org/interfaces-in-java/?ref=gcse

 

 


참고자료:

https://cloudstudying.kr/lectures/267

 

15 인터페이스 | CloudStudying

# 인터페이스(interface) ## 들어가며 --- 홍팍이는 개발자다. 동시에 강사이며, 친구이다. 상황에 따라 다양한 역할을 수행한다. ![클라우드스터딩-자바-인터페이스-다형성](https://i.imgur.com/n8DKfTJ.png)

cloudstudying.kr

https://www.geeksforgeeks.org/interfaces-in-java/?ref=gcse

https://hyuntaekhong.github.io/blog/java-basic21/

https://velog.io/@mmy789/Java-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-4

'Coding > Java' 카테고리의 다른 글

[26] JAVA 익명 객체 (Anonymous)  (0) 2022.12.10
[25] JAVA 중첩 클래스/ 중첩 인터페이스  (0) 2022.12.09
[23] JAVA 인터페이스  (0) 2022.12.04
[22] JAVA 추상클래스  (0) 2022.12.03
[21] JAVA 타입변환과 다형성  (1) 2022.12.02

+ Recent posts