본문 바로가기

Study

[JAVA/자바] 다형성 (Polymorphism)

 

다형성이란?

객체지향의 3대 특징 중 하나로

하나의 참조 변수로 여러 타입의 객체를 참조할 수 있는 것

즉, 조상 클래스 타입의 참조 변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하는 것이다

 

 

다형성의 효과

- 편리함

- 코드 길이 감소

- 유지 보수 용이

- 하나의 타입으로 다양한 실행 결과를 얻을 수 있다

 

 

참조 변수의 형변환

1. UpCasting (업캐스팅)

자식타입 -> 부모타입

자동형변환

ex) 자식.부모메소드();

      부모 = (부모)자식객체;

 

2. DownCastion (다운캐스팅)

부모타입 -> 자식타입

강제 형변환

ex) ((자식)부모).자식메소드();

 

* 상속 구조에서만 가능

* 형변환은 참조 변수의 타입을 변환하는 것이지 인스턴스를 변환하는 것은 아니기 때문에 인스턴스에 영향을 미치지 않는다

* 단지 참조 변수의 형변환을 통해서 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절하는 것이다

 

 

instanceof 연산자

[표현법] 레퍼런스변수 instanceof 클래스명

- 현재 레퍼런스가 실질적으로 어떤 클래스 타입을 참조하는지 확인할 때 사용

- 연산 결과 true, false 반환

- true의 경우 해당 클래스의 타입으로 형변환이 가능하다는 의미

 

 

동적바인딩

컴파일 시에는 해당 타입의 메소드와 연결되어 있다가

프로그램 실행 시 자식 클래스의  오버라이딩된 메소드로 바인딩이 바뀌어 동작하는 것

 

 * 성립 조건 : 상속 관계로 이루어져 다형성이 적용된 경우, 메소드 오버라이딩이 되어 있어야 함