다형성에 대한 공부 - 캐스팅, 컴파일 or 런타임 에러

Do_It·2024년 3월 29일

다형성

다형성은 이름 그래도 다양한 형태,여러 형태를 뜻한다.
프로그래밍에서는 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻한다. 보통 하나의 객체는 하나의 타입으로 고정되어 있다. 그런데 다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다는 뜻이다.

핵심은 하나의 객체가 다양한 타입을 가질 수 있다는 것!

다형성의 이해

다형성을 이해하기 위해서는 크게 2가지 핵심 이론을 알아야함

  • 다형적 참조
  • 메서드 오버라이딩

다형적 참조

다형적 = 하나가 아니고 여러개라고 이해하면 됨
다형적 참조란 여러개를 참조할 수 있다는 뜻

  • 상위타입은 하위타입을 담을 수 있다
  • 반대로 하위타입은 상위타입을 담을 수 없다.
  • 자바에서는 상위 타입 자신은 물론이고 , 자신을 기준으로 모든 하위 타입을 참조할 수 있다. 이것이 다형적 참조라고 한다.
  • 상위타입으로 찾아 올라갈 수 있지만, 하위타입으로 내려올 수 없다. 따라서 캐스팅이 필요
  • 상위타입으로 선언 될 경우 하위타입으로 바꾸는 것을 다운캐스팅이라고 한다.
  • 참조값을 읽은 다음 자식 타입으로 지정 즉, 다운캐스팅을 한다고해서 타입 자체가 변한다는 것이 아니다.

캐스팅의 종류

  • 일시적 다운캐스팅
  • 업캐스팅은 생략 가능
  • 업캐스팅은 자동으로 되는데 왜 다운캐스팅은 직접 개발자가 명시해야할까? 왜냐하면 다운캐스팅을 잘못하면 심각한 런타임 에러가 발생할 수 있기 때문이다.

업캐스팅이 안전하고 다운캐스팅이 위험한 이유

왜냐하면 객체를 생성하면 해당 타입의 상위 부모 타입은 모두 함께 생성되기 때문이다. 따라서 업캐스팅은 메모리 상에 인스턴스가 모두 존재하기 때문에 항상 안전하다. 따라서 캐스팅을 생략할 수 있다.

컴파일 오류 or 런타임 오류

프로그램 시작 전 오류 : 컴파일
프로그램 실행 중 발생한 오류 : 런타임 오류

  • 런타임오류는 매우 안좋다 왜냐하면 프로그램 실행 중에 발생하기 때문이다.

instance of

참조하는 대상이 어떤 인스턴스를 참조하고 있는지 확인하려는 방법이다.
즉, 다운캐스팅을 시작하기 전 어떤 인스턴스인지 확인하는 것이다.

부모는 자식을 담을 수 있지만
부모 intanseOf 자식

자식은 부모를 담을 수 없다
자식 instanseof 부모

메서드 오버라딩

다형성을 이루는 중요한 핵심 이론은 오버라이딩
메서드 오버라이딩에서 꼭 기억해야 할 점은 오버라이딩 된 메서드가 항상 우선권을 가진다는 점이다.

  • 멤버 변수는 오버라이딩 되지 않는다.
  • 중요한 것은 오버라딩 된 메서드는 항상 우선권을 가진다는 것이다.

기존 기능을 하위 타입에서 새로운 기능으로 재정의 한다는 것이다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글