본문 바로가기
Develop/Java

다형성

by 준팍(junpak) 2023. 4. 4.

다형성의 정의

  • 객체지향적 개념
    • 하나의 객체가 여러가지 형태(타입)를 가질 수 있는 능력
  • 자바
    • 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함
  • 특징
    • 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있다.
      • 같은 타입의 인스턴스일지라도, 참조 변수의 타입에 따라
        사용할 수 있는 멤버의 개수가 달라진다.
    • 자손클래스 타입의 참조변수로 조상 클래스의 인스턴스를 참조할 수 없다.
      • 조상 클래스에는 존재하지 않는 멤버를 사용할 가능성이 있으므로
        컴파일 에러가 발생한다.
        (= 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 작거나 같아야한다.)

참조변수의 다형성

  • 방법 : 괄호 안에 변환하고자 하는 클래스명(타입의 이름) 명시
  • 조건 : 서로 상속 관계에 있는 클래스 사이에만 가능
  • Up-casting
    • 자식 클래스 타입에서 부모 클래스 타입으로의 타입 변환
    • 생략 가능
  • Down-casting
    • 부모 클래스 타입에서 자식 클래스 타입으로의 타입 변환
    • 생략 불가
  • 형변환은 참조 변수의 타입만을 변환한다.
    • 인스턴스를 변환하는 것이 아니기 때문에 인스턴스에 아무런 영향을 미치지 못한다.
    • 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)만을 조절한다.
  • 메서드
    • 참조 변수의 타입과 관계 없이 항상 실제 인스턴스의 메서드
      (오버라이딩된 메서드)가 호출된다.
  • 멤버 변수
    • 멤버 변수가 중복으로 정의된 경우, 참조 변수의 타입에 따라
      사용되는 멤버 변수가 달라진다.
      • 조상 타입의 참조 변수 : 조상 타입의 멤버변수 사용
      • 자손 타입의 참조변수 : 자손 타입의 참조 변수
  • 여러 종류의 객체를 배열로 다루기
    • 조상 타입의 참조변수 배열 사용 시, 공통의 조상을 가진 서로 다른 종류의 객체를 배열로 묶어서 다룰 수 있다.

매개변수의 다형성

  • 방법 : 메서드의 매개변수에 조상타입의 참조변수 선언
  • 조건 : 서로 상속 관계에 있는 클래스 사이에만 가능
  • 매개변수로 조상 타입의 참조변수 선언 시, 조상 클래스를 상속 받은 자손타입의 참조 변수들을 모두 매개변수로 받아들일 수 있다.
  • 그 외에도 참조변수의 다형적 특징을 공유한다.

InstanceOf 연산자

  • 런타임에 참조 변수가 실제로 참조하고 있는 인스턴스의 타입을 확인할 경우 사용
  • 방법 : 참조변수 instanceOf 클래스 이름
  • 참조 변수가 실제로 참조하는 인스턴스 타입이 클래스 타입과 같다면 true,
    다르면 false 반환
  • 캡슐화가 깨지고 OCP, SRP 원칙에 위배되며, 성능적으로 다형성을 이용할 때보다 떨어지므로 주의해서 사용해야한다.

레퍼런스

'Develop > Java' 카테고리의 다른 글

try-finally와 try-with-resource  (0) 2023.04.05
추상 클래스와 인터페이스  (0) 2023.04.04
제어자  (0) 2023.04.04
메서드 오버라이딩(Overriding)  (0) 2023.04.04
메서드 오버로딩 (Overloading)  (0) 2023.04.03