상속과 다운캐스팅



개념

  • 다형성 : 여러가지 형태를 가질 수 있는 능력. 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하며 객체지향 프로그래밍의 재활용성, 유지보수성에 대한 대표적 특징이 된다.

  • 캐스팅(Casting) : 형변환. 타입을 변환하는 것

  • 업캐스팅(Upcasting) : 상속 관계에서 자식 클래스의 객체가 부모 클래스의 타입으로 캐스팅 되는 것

ex)

Customer vc = new VIPCustomer();

상위클래스 Customer의 변수 vc를 하위클래스인 VIPCustomer 인스턴스로 선언하면 묵시적으로 자동 형변환 됨

  • 다운캐스팅(Downcasting) : 업캐스팅 된 인스턴스를 원래의 타입으로 돌리는 것

ex)

VIPCustomer vCustomer = (VIPCustomer)vc;

※ 하위클래스로의 형변환은 명시적으로 지정해줘야한다는 특징이 있음


instanceof

: 참조변수가 참조하고있는 인스턴스의 실제 타입을 알아보기 위해 사용하는 연산자

if (Customer instanceof VIPCustomer) {}

이렇게 사용되며 해당 인스턴스의 형이 원래 인스턴스 타입이라면 true, 아니면 false를 반환한다.

  • 클래스 타입이 다르다면 다운캐스팅 시 캐스팅 될 수 없다는 에러가 나게된다. 때문에 다운캐스팅 전 인스턴스의 타입을 확인하기위해 instanceof를 사용하고 false가 나오면 실행되지 않도록하여 더욱 안정적인 코드를 작성할 수 있다.


결론

다운캐스팅을 하면 코드가 지저분해지고 코드 내 많은 if문 사용으로 효율이 좋지 않을수도 있다.
꼭 원래상태로 되돌려놔야하는 상황이 아니라면 오버라이딩 하는 편이 훨씬 깔끔할 수 있다.

profile
이안이의 우당탕탕 개발기

0개의 댓글