[Java] 다형성

SANG JONG CHOI·2022년 10월 28일
0

Java

목록 보기
7/28

타입변환과 다형성 (Polymorphism)

다형성

  • 같은 타입이지만 실행 결과가 다양한 객체를 이용(대입)할 수 있는 성질
  • 하나의 타입에 여러 개의 객체를 대입하여 다양한 기능 이용 가능
  • 부모 타입에는 모든 자식 객체가 대입 가능
  • 자식 타입은 부모 타입으로 자동 타입 변환됨

자동 타입 변환 (Promotion)

image-20220619031426237
  • 프로그램 실행 중에 자동 타입 변환이 일어나는 것

  • 비록 변수는 자식 객체를 참조하지만

  • 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정

  • 바로 위의 부모가 아니더라도 상속 계층의 상위이면 자동 타입 변환 가능

주의! - 변환 후에는 부모 클래스 멤버만 접근가능

image-20220619031316223

예외의 경우 : 오버라이딩

  • 메소드가 자식 클래스에 오버라이딩 되었다면
  • 자식 클래스의 메소드가 대신 호출됨

강제 타입 변환 (Casting)

image-20220619031453092
  • 부모 타입을 자식 타입으로 변환하는 것

주의! - 모든 부모 타입을 자식 클래스 타입으로 강제 변환할 수 있는 것은 아니고

  • 조건 : 자식 타입을 부모 타입으로 자동 변환된 후, 다시 자식 타입으로 변환할 때만 가능 (원위치 개념)
강제 타입 변환이 필요한 경우
  • 자식 타입이 부모 타입으로 자동 변환되면
  • 부모 타입에 선언된 필드와 메소드만 사용 가능(오버라이딩 예외)
  • 자식 타입에 선언된 필드와 메소드를 다시 사용해야 할 경우

instanceof 연산자 : 객체 타입 확인

  • 참조 변수가 참조하고 있는 인스턴스의 실제 타입 확인
  • 부모 타입이면 모두 자식 타입으로 강제 타입 변환할 수 있는 것 아님
  • 부모 타입으로 변환되어 있는 상태에서만 강제 타입 변환 가능
  • 아니면 ClassCastException 예외 발생
  • 먼저 자식 타입인지 확인 후 강제 타입 실행해야 함

instanceof 연산자

boolean result = 참조변수 instanceof 타입(클래스명)
: 왼쪽의 참조변수가 오른쪽 타입의 인스턴스이면 true 반환
: true 반환되면 참조변수가 검사한 타입으로 타입 변환 가능

매개변수의 다형성

  • 매개변수가 클래스 타입인 경우
  • 매개값을 다양화하기 위해 매개변수에 자식 타입 객체 대입 허용 (자동 타입 변환)
  • 따라서, 해당 객체뿐 아니라 자식 객체까지도 매개값으로 사용 가능
  • 매개 값으로 어떤 객체가 전달되느냐에 따라 실행 결과 달라짐 → 매개변수의 다형성
  • 자식 객체가 부모의 메소드를 재정의 했다면 내부에서 오버라이딩된 메소드를 호출함으로써 실행 결과 다양해짐
image-20220619031650463
profile
No error, No gain

0개의 댓글