반응형
다형성 ( Polymorphism): 많은 형태를 가질 수 있는 능력
하나의 객체가 여러 타입의 인스턴스(객체)로 취급 될 수 있는 특성
상속 + 메서드 오버라이딩 + 클래스 타입 변환
- 여러 객체들 중 공통 특성으로 타입을 추상화하고 그것을 상속(인터페이스라면 구현)해야한다
- 부모 클래스 타입의 참조 변수로 자식 클래스 객체를 참조한다
장점
코드 재사용성(Reuse) : 다형성을 사용하면 코드의 재사용성이 높아져서 동일한 코드가 다른 클래스에서 재사용될 수 있으므로, 개발자는 코드의 중복을 줄이고 생산성을 향상시킬 수 있다
유연성(Flexibility) : 다형성을 사용하면 객체의 형식을 추상화하고, 이를 사용하는 다른 객체에서 동일한 인터페이스를 사용할 수 있다 . 이를 통해 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다.
코드 가독성(Readability) : 다형성을 사용하면 동일한 이름을 가진 메서드나 연산자가 서로 다른 동작을 하기 때문에, 코드의 가독성이 높아진다. 이를 통해 개발자는 코드를 더 쉽게 이해하고, 유지보수를 수행할 수 있다.
단점
복잡성(Complexity) : 다형성을 사용하면 코드의 복잡성이 증가할 수 있다. 다른 클래스에서 동일한 이름의 메서드나 연산자를 사용하기 때문에, 코드의 동작을 이해하는 데 어려움이 있을 수 있다.
오버헤드(Overhead) : 다형성을 사용하면, 런타임 시에 메서드나 연산자의 동작을 결정하기 위해 추가적인 연산이 필요할 수 있다. 이를 통해 일부 성능 손실이 발생할 수 있다.
디버깅(Difficulty of debugging) : 다형성을 사용하면, 코드의 실행 경로가 다양해져 디버깅이 어려울 수 있다. 이를 위해 디버깅을 위한 툴과 기법을 익혀야 하며, 이는 추가적인 학습 비용이 발생할 수 있다.
instanceof 연산: 참조변수값 instanceof 타입(클래스명)
해당 객체가 특정 클래스의 인스턴스인지 또는 그 클래스를 상속받은 자식 클래스의 인스턴스인지를 확인
다형성예제 - 주석 꼼꼼히
class Vehicle {
void display() {
System.out.println("운송수단입니다.");
}
}
class Bus extends Vehicle {
@Override
void display() {
System.out.println("버스를 타고 갑니다.");
}
}
class Subway extends Vehicle {
@Override
void display() {
System.out.println("지하철을 타고 갑니다.");
}
}
public class B_Polymorphism {
public static void main(String[] args) {
Vehicle myVehicle = new Vehicle(); // Vehicle 객체
Vehicle myBus = new Bus(); // Bus 객체(자동 타입 변환)
Vehicle mySubway = new Subway(); // Subway 객체(자동 타입 변환)
if (myBus instanceof Vehicle) {
// myBus 객체가 Vehicle의 인스턴스 이거나
// , 해당 클래스를 상속받은 클래스의 인스턴스 인 경우
myBus.display(); // 버스를 타고 갑니다.
}
if (myVehicle instanceof Bus) {
System.out.println("운송수단은 버스입니다.");
} else {
System.out.println("운송수단은 버스가 아닙니다.");
// 운송수단은 버스가 아닙니다.
}
cf) instanceof 연산자 계산식에서 true의 결과값이 출력되면
> 해당 클래스 타입으로 형 변환이 가능
> 형 변환 이전에는 instanceof 연산자를 통해 오류 방지
반응형
'JAVA' 카테고리의 다른 글
Stramp API (1) | 2025.05.02 |
---|---|
interface 인터페이스 (0) | 2024.10.04 |
캡슐화 (0) | 2024.09.25 |
상속(inherence)- extends, super(); (2) | 2024.09.23 |
접근제한자 (1) | 2024.09.23 |