항해99 21일차 개발일지

홍당무·2022년 12월 10일
0

다형성(Polymorphism)

다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.

참조 변수의 다형성

부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있다. 이 때, 참조 변수가 사용할 수 있는 맴버의 개수가 실제 인스턴스의 맴버 개수보다 같거나 적어야 참조할 수 있다.

예제 1

이렇듯, 특정 타입의 참조 변수로는 당연히 같은 타입의 인스턴스를 참조할 수 있다. 왜냐하면 참조 변수가 사용할 수 있는 맴버의 개수가 실제인스턴스의 맴버 개수와 같기 때문이다.

또한, 부모 클래스 타입의 참조 변수로도 자식 클래스 타입의 인스턴스를 참조할 수 있다. 왜냐하면 참조 변수가 사용할 수 있는 맴버의 개수가 실제 인스턴스의 맴버 개수보다 적기 때문이다.

하지만 반대의 경우인 자식 클래스 타입의 참조 변수로는 부모 클래스 타입의 인스턴스를 참조할 수 없다. 왜냐하면 참조 변수가 사용할 수 있는 맴버의 개수가 실제 인스턴스의 맴버 개수보다 많기 때문이다.

클래스는 상속을 통해 확장될 수는 있어도 축소될 수는 없으므로, 자식 클래스에서 사용할 수 있는 맴버의 개수가 언제나 부모 클래스와 같거나 많게 된다.

참조변수의 타입 변환

1. 서로 상속 관계에 있는 클래스 사이에만 타입 변환을 할 수 있다.

2. 자식 클래스 타입에서 부모 클래스 타입으로의 타입 변환은 생략할 수 있다.

3. 부모 클래스 타입에서 자식 클래스 타입으로의 타입 변환은 반드시 명시해야 한다.

참조 변수 타입 변환도 기본 타입의 타입 변환과 마찬가지로 타입 캐스트 연산자 (())를 사용한다.

예제 2

instanceof 연산자

다형성으로 인해 런타임에 참조 변수가 실제로 참조하고 있는 인스턴스의 타입을 확인할 필요성이 생긴다. 이 때, instanceof 연산자를 사용해 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 확인할 수 있다.

참조변수 instanceof 클래스이름

왼쪽에 전달된 참조 변수가 실제로 참조하고 있는 인스턴스의 타입이 오른쪽에 전달된 클래스 타입이면 true를 반환하고, 아니면 false를 반환한다. (만약 참조 변수가 null을 가리키고 있으면 false를 반환한다.)

예제 3

profile
공부하는 백엔드 개발자

0개의 댓글