[혼자 공부하는 자바] 7/12 8-2 [타입 변환과 다형성] [인터페이스 상속]

2020. 7. 12. 20:35·JAVA


다형성 구현 위해서 : 메소드 재정의와 타입 변환이 필요했다. (상속에서 배움)

인터페이스도 '메소드 재정의, 타입 변환' 기능이 제공되므로, 다형성 구현을 공부할 수 있다.

 

ㅡㅡㅡ

상속: 같은 종류의 하위 클래스를 만드는 기술

인터페이스: 사용 방법이 동일한 클래스를 만드는 기술

ㅡㅡㅡ

 

인터페이스의 다형성 -> 프로그램 소스 코드는 변함이 없다. 구현 객체만 교체함으로써 프로그램의 실행결과를 다양하게 만들 수 있다.

 

 

 

 

자동 타입 변환 + : 인터페이스 구현 클래스의 자식 객체도 인터페이스타입으로 자동타입변환 가능하다.

 

더보기

자동타입변환

ㅇ필드, 매개변수의 다형성을 구현할 수 있다.

ㅇ필드, 매개변수 타입을 인터페이스로 선언 --> 다양한 구현 객체를 대입해서 실행결과를 다양하게 할 수 있다.


필드 다형성 익히기

Car클래스에서는 인터페이스 타입 필드 선언 후 초기 구현객체를 대입했고,

Car실행클래스에서는 그 인터페이스 타입 필드에다가 다른 구현객체를 새로 대입했다.

 


매개변수의 다형성

자동타입 변환은! 인터페이스 타입 필드에 값 대입할 때 뿐만 아니라

주로 메소드를 호출할 때 많이 발생한다고 한다~~! 오~~~그래요??? >_<

인터페이스는 메소드의 매개 변수로 많이 등장한다

"매개변수의 다형성"을 배웁시다~~~~~>_<

 

예를 들면.. (상속에서 했던 자동타입변환 느낌이랑 쫌 많이 비슷하다!!)

drive() 라는 메소드에 인터페이스 Vehicle 타입을 매개 변수로 선언한 상태에서,

인터페이스 Vehicle을 구현한 Bus객체를 매개값으로 넣기 가능하다.

이 때, 자동 타입 변환이 발생한다.

ㄴ매개변수 타입이 인터페이스일 때, 어떠한 구현 객체도 매개값으로 자유롭게 사용 가능!!

ㄴ당연히 어떠 구현 객체가 제공되느냐에 따라 메소드 실행결과는 다양해진다.

 

<<매개변수의 다형성 익히기>>


구현객체가 인터페이스 타입으로 자동타입변환하면, 

인터페이스에 선언된 멤버만 사용 가능한 제약이 있다.

 

인터페이스에 3개의 메소드가 있고, 구현클래스에는 5개의 메소드가 있을 때

인터페이스 타입으로 구현객체가 자동타입변환된다면

3개의메소드만 사용 가능하다.

하지만 구현클래스에 있는 클래스멤버를 사용하고 싶을 수도 있다!!

이럴 때 강제타입 변환을 쓴다. (상속에서 공부한 거랑 비슷한 맥락)

강제 타입변환

구현클래스 변수 = (구현클래스) 인터페이스변수;

 

<<강제타입변환하는 상황 익히기>>


자아~~ 강제타입 변환을 확인했으면

이제 모다???? (미소천사~~~>0<~~!)

객체타입 확인~~

저번에도 상속 배울 때

강제타입변환을 막 할 수 없으니까, 객체의 타입을 확인 먼저 하는게 필요했었다.

 

강제타입 변환은 구현 객체가 인터페이스 타입으로 변환되어 있는 상태에서 가능하다.

그치만 원래 어떤 객체가 변환되어있느냐에 따라서 캐스팅 후 사용 가능한 클래스 멤버의 종류가 다르기 때문에,

어떤 객체가 들어가 있는 것인지 확인하는 것이 중요하다.

 

<필드에서>

Vehicle vehicle = new Taxi();

Bus bus = (Bus) vehicle; )

 

>>ClassCastException 발생<<

 

 

<메소드의 매개변수에서>

public void drive(Vehicle vehicle) {

  Bus bus = (Bus) vehicle;

  bus.checkFare();

  vehicle.run();

}

 

매개변수에 어떤 구현 객체가 지정될 지 모르는데 Bus로 강제타입변환하면

>>ClassCastException 발생 가능성 있음<<

 

네!!

상속에서 객체 타입을 확인하기 위해 instanceof 연산자를 사용했었다.

인터페이스에서도 이 instanceof 연산자를 통해 마찬가지로 어떤 구현 객체인지 그 타입을 확인할 수 있다.

 

예) Vehicle 인터페이스타입으로 변환된 객체가 Bus인지...확인해부쟝...

if(vehicle instanceof Bus) {

  Bus bus = (Bus) vehicle;

}

맞음 캐스팅하구 아님 말라는 것!! 확인 먼저 하고 캐스팅 가능할 때 캐스팅 할 수 있다.

 

 


인터페이스 다중 상속

클래스와 달리

인터페이스는 또 다른 인터페이스를 상속할 수 있다.

상속 키워드 extends 키워드 뒤에 상속할 인터페이스들을 나열한다.

 

public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 { ... }

마찬가지로, 하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다. 

 

구현 클래스로부터 객체를 생성한 후 --> 하위 or 상위 인터페이스 타입으로 변환 가능하다

하위인터페이스 변수 = new 구현클래스(...);
상위인터페이스1 변수 = new 구현클래스(...);
상위인터페이스2 변수 = new 구현클래스(...);

주의!!

하위인터페이스로 타입변환 되었을 때 : 하위, 상위 인터페이스의 모든 메소드 사용 가능

상위인터페이스로 타입변환 되었을 때 : 상위 인터페이스에서 선언된 메소드만 사용가능!!!!

 

<<다중 인터페이스 상속 익히기>>

 


확인 문제

03.

앗 @Override를 쓰려면 재정의한 메소드마다 각각 써주는 거다.


생각보다 계획이 밀렸다.

이번주 계획은 완벽히 지키지 못했다.

챕터9는 내일 끝내고

작성한 학습포스팅을 보면서 지난 챕터들은다시 복습하자

 

 

반응형

'JAVA' 카테고리의 다른 글

[2주차] 기본미션 + 선택미션 [혼공단] [혼공자]  (0) 2020.07.14
[혼자 공부하는 자바] 7/13 9-1 [중첩 클래스와 중첩 인터페이스]  (0) 2020.07.13
[혼자 공부하는 자바] 7/11 8-1 [인터페이스] [추상 메소드] [실체 메소드]  (0) 2020.07.11
[혼자 공부하는 자바] 7/11 07-3 [추상 클래스] [실체 클래스] [메소드 재정의]  (0) 2020.07.11
[혼자 공부하는 자바] 7/10 07-2 [타입 변환과 다형성] [자동 타입 변환] [강제 타입 변환]  (0) 2020.07.11
'JAVA' 카테고리의 다른 글
  • [2주차] 기본미션 + 선택미션 [혼공단] [혼공자]
  • [혼자 공부하는 자바] 7/13 9-1 [중첩 클래스와 중첩 인터페이스]
  • [혼자 공부하는 자바] 7/11 8-1 [인터페이스] [추상 메소드] [실체 메소드]
  • [혼자 공부하는 자바] 7/11 07-3 [추상 클래스] [실체 클래스] [메소드 재정의]
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (389)
      • 미분류글 (32)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
[혼자 공부하는 자바] 7/12 8-2 [타입 변환과 다형성] [인터페이스 상속]
상단으로

티스토리툴바