Java - 타입 변환과 다형성

김민1·2023년 2월 9일
3

Java

목록 보기
5/8

다형성 - 사용 방법은 동일하지만 다양한 객체를 이용, 다양한 실행결과가 나오게끔 하는 성질
ex) 자동차 타이어(어떤 타이어를 쓰냐에 따라 주행 성능이 달라짐)

자동 타입 변환

타입을 다른 타입으로 변환하는 행위, 클래스에서도 마찬가지로 타입 변환이 있음
클래스의 변환은 상속 관계에 있는 클래스 사이에서 발생함
자식은 부모 타입으로 자동 타입 변환 가능

부모타입 변수 = 자식타입;

또한 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 일어날 수 있음

부모 타입으로 자동 타입 변환된 이후 부모 클래스에 선언된 필드와 메소드만 접근 가능
비록 변수는 자식 객체를 잠조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정

but 메소드가 자식 클래스에서 재정의되었다면 자식 클래스의 메소드가 대신 호출됨.
이 사항은 다형성과 관련이 있기 때문에 매우 중요한 성질

필드의 다형성

자동 타입 변환이 왜 필요한가? 그리고 그냥 자식 타입으로
사용하면 될 것을 부모타입으로 변환해서 사용하는 이유는?

다형성을 구현하기 위해서라고 보면 됨.
필드의 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 있음. 이것이 필드의 다형성

매개 변수의 다형성

자동 타입 변환은 필드의 값을 대입할 때에도 발생 but 주로 메소드 호출할 때 많이 발생.
정석대로라면 메소드 호출할 때 매개 변수의 타입과 동일한 매개값을 지정해줘야 함 but
매개값을 다양화하기 위해 매개 변수에 자식 객체를 지정할 수도 있음.

매개변수의 타입이 클래스일 경우, 해당 클래스의
객체뿐만 아니라 자식 객체까지도 매개값으로 사용할 수 있음

매개 변수의 다형성은 매개값으로 어떤 자식 객체가 제공되느냐에 따라
메소드의 실행결과가 다양해질 수 있다는 것

강제 타입 변환

부모 타입을 자식 타입으로 변환하는 것을 강제 타입 변환이라고 함
하지만 모든 부모 타입을 자식 타입으로 강제 타입 변환이 가능한 것은 아님

자식 타입이 부모 타입으로 자동 타입 변환 후 다시 자식 타입으로 변환할 때 강제 타입 변환 가능

강제 타입 변환은 자식 타입이 부모 타입으로 변환되어 있는 상태에서만 가능,
처음부터 부모 타입으로 생성된 객체는 자식 타입으로 변환 불가능

자식타입 변수 = (자식타입) 부모타입; //강제 타입 변환 가능

Parent parent = new Parent();
Child child = (Child) parent; // 강제 타입 변환 불가능

자식 타입이 부모 타입으로 자동 타입 변환하면, 부모에 선언된 필드와 메소드만
사용 가능하다는 제약 사항이 따름. 그렇기 때문에
만약에 자식에 선언된 필드와 메소드를 꼭 사용해야 할 때 사용하는 것

객체 타입 확인

부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인하는 방법.
어떤 객체가 어떤 클래스의 인스턴스인지 확인하는 방법 -> instanceof 연산자 사용

boolean result = 좌항(객체) instanceof 우항(타입)

마치며

OOP 특성 4가지 중 하나인 다형성입니다
중요한 부분이라고 생각해 정리해서 올렸습니다

추가할 사항이나 고쳐야할 부분이 있으면 댓글이나 이메일로 연락주세요.

profile
https://kimmin1kk.github.io/ 로 블로그 옮겼습니다

0개의 댓글