728x90

 

다형성(Polymorphism)

다양한 형태를 지니고 있다고 해서 다형성

부모타입 레퍼런스로 자식 타입 객체를 받아올 수 있는 것

부모타입 레퍼런스에 자식 타입 객체를 담을 수 있는 것

// 기존
Animal a = new Animal(); // o
Dog d = new Dog();       // o
Snake s = new Snake() ;  // o

// 다형성
Animal a1 = new Dog();   // o
Animal a2 = new Snake(); // o  이를 업캐스팅(Upcasting)이라고 함

상속을 전제로,

부모 타입으로 만들어진 자식 객체를 부모 클래스 타입으로 다룰 수 있는(담을 수 있는) 기능

자식을 부모에게 담는 것

자식 객체를 부모타입에 담는 것을 다형성

 

Class의 형변환 (Upcasting, Downcasting)

형변환은 클래스 사이에서 일어나는데 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 형변환이 가능

1)upcasting

upcasting은 서브타입의 인스턴스를 수퍼타입의 변수로 접근하는 것을 말합니다.

즉, 자식 클래스가 부모 클래스 타입으로 캐스팅 되는것을 뜻합니다.

이때 서브 타입에서는 수퍼타입에 선언된 필드 혹은 메서드만 접근 가능합니다.

 

2) down casting

downcasting은 서브타입 인스턴스를 참조하는 수퍼타입 변수를 재참조하는 것을 말합니다.

즉, 부모 클래스가 자식클래스 타입으로 캐스팅되는 것을 뜻합니다.

이때 강제형변환이 일어나며, 다운캐스팅한 타입에서 선언된 모든 필드와 메서드에 접근이 가능합니다.

출처 : https://viera.tistory.com/3

 

업캐스팅 : 부모타입 자식객체

다운 캐스팅 : 부모타입 참조변수를 자식 클래스 타입으로 형변환

→ 자식객체의 멤버에 접근(참조)가능

 

 

1. 부모 타입 레퍼런스로 부모 객체를 다룰 때

2. 자식 타입 레퍼런스로 자식 객체를 다룰 때

3. 부모 타입 레퍼런스로 자식 객체를 다룰 때

4. 자식 타입 레퍼런스로 부모 객체를 다룰 때

 

자식 타입 레퍼런스로 부모 객체를 다룰 때 : 에러 이유

4번 자식 타입 레퍼런스로 부모 객체를 다룰 때, 에러 이유

에러 이유 : 확장된 Child2가 Parent 더 기능이 많은데, 기능이 적은 Parent가 확장된 Child2의 부분을 맞춰줄 수 없기 때문

즉, 없는 값까지 불러와야 하니 에러

 

 

객체배열에서의 다형성

객체타입이 다른 4개의 배열을 하나에 담을 수 없지만 객체배열 다형성 덕에 가능해짐

 

instanceof

객체 자체비교하기 위한 연산자

레퍼런스 변수가 해당 타입의 객체를 참조하고 있는지 확인할 때 사용

true / false

ex) 레퍼런스 A instanceof 클래스타입 B

= a가 b타입의 객체를 참조하니?

A instanceof B : A가 B타입의 객체를 참조하니? 라고 물어보는 것

A(레퍼런스) instanceof B(클래스타입) :  A가 B타입의 객체를 참조하는가

instance, 객체라는 뜻

of, ~의라는 뜻

 


 

동적 바인딩 & 정적 바인딩

바인딩 : 묶여있는 것

프로그램이 실행할 때 모든 코드들은 다 바인딩이 되어있다(묶여있다)

이 메소드를 진짜로 실행한 메소드를

코드로써 실제로 실행할 메소드까지 연결시켜주는걸 바인딩한다고 함

모든 코드들은 정적 바인딩이 되어있음

 

1.정적 바인딩

정적 바인딩이란?

코드만 보고 바인딩 시키는 것

컴파일 할 때 연결되서 바인딩되는 것

정적 바인딩

. 은 ~안에 뜻

pArr[i].print(); // 패런트타입 pArr[i] 안에 print()메소드 ( pArr[i] > print() )

패런트에 있는 프린트해와야겠다

 

2.동적바인딩

내가 막 실행할려고 컴파일,오류검사등 다 마치고 막 실행할려고 할 때 그 실행할 객체를 기준으로 해서 바인딩이 바뀌는 것

윗줄 예시로 보면 pArr[i] 안에 객체가 패런트가 아니고 윗줄

기준이 실행할 객체 타입으로 다시 바인딩이 바뀜=동적바인딩

동적 바인딩 적용 조건

다형성과 오버라이딩이 적용되어있다는 전제

728x90
반응형

+ Recent posts