



여러 개의 형태를 갖는다라는 의미의 그리스어에서 유래된 다형성(polymorphism)은 하나 이상의 형태를 뜻합니다.
Java에서 다형성이란 동일한 이름을 사용하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록 하는 성질을 말합니다. 다형성은 부모 타입으로 자식 객체를 사용하는 것이므로 다형성을 구현하려면 메서드 재정의와 타입 변환이 필요합니다.




자식은 부모 타입으로 자동 타입 변환이 가능합니다. 이를 업캐스팅 또는 자동 타입 변환이라고 합니다.
업캐스팅은 부모 타입 변수 = 자식 객체; 형식으로 작성할 수 있습니다.
부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메서드만 접근이 가능합니다.
변수는 자식 객체를 참조하지만, 변수로 접근 가능한 멤버는 부모 클래스 멤버로만 한정됩니다.
하지만 메서드가 자식 클래스에서 재정의 되었다면 자식 클래스의 메서드가 대신 호출됩니다.



반대로 강제 타입 변환은 부모 타입을 자식 타입으로 변환하는 것을 말합니다.
모든 부모 타입을 자식 타입으로 강제 변환할 수 있는 것은 아닙니다.
자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있습니다.
자식 클래스에서만 선언된 필드와 메서드를 사용해야 한다면 강제 타입 변환을 해서 자식 타입으로 변환한 다음 자식 클래스의 필드와 메서드를 사용합니다.


필드의 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 있는데, 이를 필드의 다형성이라고 합니다. 프로그램은 수많은 객체들이 서로 연결되고 각자의 역할을 하게 되는데, 이 객체들은 다른 객체로 교체될 수 있어야 합니다.


자동 타입 변환은 필드의 값을 대입할 때도 발생하지만, 주로 메서드를 호출할 때 많이 발생합니다.
메서드를 호출할 때는 매개변수의 타입과 동일한 매개값을 지정하는 것이 정석이지만, 매개값을 다양화하기 위해 매개변수에 자식 객체를 지정할 수 있습니다. 이를 매개변수(메서드)의 다형성이라고 합니다.


강제 타입 변환은 자식 타입이 부모 타입으로 변환되어 있는 상태에서만 가능하기 때문에 처음부터 부모 타입으로 생성된 객체는 자식 타입으로 변환할 수 없습니다.
이때 어떤 객체가 어떤 클래스의 인스턴스인지 확인하기 위해 instanceof 연산자를 사용합니다.
객체 instanceof 타입 형식으로 작성했을 때, 해당 객체가 해당 타입으로 객체가 생성되었으면 true를 리턴하고 그렇지 않으면 false를 리턴합니다.
'프로그래밍 언어 > 자바 (Java)' 카테고리의 다른 글
[자바(Java) 공부하기] 21. 추상화 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.21 |
---|---|
[자바(Java) 공부하기] 19. 상속 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.19 |
[자바(Java) 공부하기] 18. 중첩 클래스 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.18 |
[자바(Java) 공부하기] 17. 지정 예약어 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.17 |
[자바(Java) 공부하기] 16. 접근제한자 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.16 |
[자바(Java) 공부하기] 15. 클래스 배열(객체 배열) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.15 |
[자바(Java) 공부하기] 14. 생성자 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.14 |
[자바(Java) 공부하기] 13. 필드 - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.13 |