다형성의 정의
- 객체지향적 개념
- 하나의 객체가 여러가지 형태(타입)를 가질 수 있는 능력
- 자바
- 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함
- 특징
- 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있다.
- 같은 타입의 인스턴스일지라도, 참조 변수의 타입에 따라
사용할 수 있는 멤버의 개수가 달라진다.
- 같은 타입의 인스턴스일지라도, 참조 변수의 타입에 따라
- 자손클래스 타입의 참조변수로 조상 클래스의 인스턴스를 참조할 수 없다.
- 조상 클래스에는 존재하지 않는 멤버를 사용할 가능성이 있으므로
컴파일 에러가 발생한다.
(= 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 작거나 같아야한다.)
- 조상 클래스에는 존재하지 않는 멤버를 사용할 가능성이 있으므로
- 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있다.
참조변수의 다형성
- 방법 : 괄호 안에 변환하고자 하는 클래스명(타입의 이름) 명시
- 조건 : 서로 상속 관계에 있는 클래스 사이에만 가능
- 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 |