다형성
객체지향 프로그래밍의 핵심 개념 4요소 중 하나입니다.
이는 같은 코드에서 여러 실행 결과가 나올 수 있는 것을 의미합니다.
따라서 하나의 객체가 여러 타입을 가질 수 있습니다. 그에 따라 동일한 메서드 호출이 객체의 타입에 따라 다른 동작을 할 수 있게 합니다.
https://hollydev.tistory.com/1
JAVA에 대하여
객체지향 언어클래스와 객체를 기반으로 프로그래밍하는 방식, 다음과 같은 특성을 지님코드의 재사용성과 유지보수성을 높이기 위해 클래스와 객체 사용* 클래스(Class) : 데이터와 메소드
hollydev.tistory.com
4요소의 간단한 설명이 정리되어 있습니다.
다형성 구현
상속 또는 구현 상황에서 메소드 오버라이딩/메소드 오버로딩 으로 다형성을 구현할 수 있다.
메소드 오버라이딩 : 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의 하는 것, 반드시 상속 관계에 있는클래스 간 발생
- 규칙
- 메소드 이름 동일
- 매개 변수 정보(개수, 타입 , 순서) 동일
- 반환 타입 동일
- 접근 제어자 : 부모 클래스의 메소드보다 좁은 범위 사용 불가
- 예외 : 부모 클래스의 예외보다 더 많은 예외 사용 불가
// 부모 클래스 Car
public class Car {
String model;
Stirng brand;
int wheels;
int price;
public void driveCar() {
System.out.println("운전합니다.");
}
}
// 자식 클래스 SportCar
public class SportCar extends Car{
public void driveCar() { // 부모 클래스의 driveCar 오버라이딩
System.out.println("스포츠카를 운전합니다.");
}
}
메소드 오버로딩 : 같은 이름의 메소드를 여러 개 정의하는 것, 동일 클래스 내 또는 상속 관계에서 발생
- 규칙
- 메소드 이름 동일
- 매개 변수 정보(개수, 타입 , 순서) 달라야 함
- 반환 타입은 동일 하지 않아도 가능
// 자식 클래스 SportsCar
public class SportsCar{
public void drivecar() {
System.out.println("스포츠카를 운전합니다.");
}
public void driveCar(int a) {
System.out.println("스포츠카를 " + a + "번 운전합니다."); // 메소드 오버로딩
}
}
객체 배열의 다형성 구현
상속 관계에 있는 부모의 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체를 저장할 수 있다.
// 자식 클래스 Truck
public class Truck extends Car {
public void driveCar() {
System.out.println("트럭을 운전합니다.");
}
}
// 부모 클래스 Car의 자식 클래스는 SportsCar, Truck이다
public class Main {
public static void main(String[] args) {
Car[] carArr = new Car[2]
// 상속 관계에 있는 부모 클래스 타입의 배열
// 배열 인덱스에 여러 종류의 자식 클래스 객체 저장
carArr[0] = new SportsCar();
carArr[1] = new Truck();
}
}
매개 변수의 다형성 구현
메소드 호출 시 부모 타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있다.
public void execute() {
driveCar(new SportsCar()); // Car c = new SportsCar()
driveCar(new Truck()); // Car c = new Truck()
}
public void driveCar(Car c) {}
다형성의 장점
- 유연성 : 코드의 유연성과 사용성을 높인다. 새로운 클래스가 추가되더라도 기존 코드를 수정하지 않고도 확장 가능하다.
- 유지보수성 : 공통 인터페이스나 부모 클래스를 사용함으로서 유지보수가 용이해진다.
- 가독성 : 동일한 인터페이스를 통해 다양한 객체를 다룰 수 있어 코드의 가독성을 높인다.
'JAVA' 카테고리의 다른 글
| 왜 우리는 JVM을 공부해야 하는가: JRE, JDK (1) | 2026.04.04 |
|---|---|
| [UML] 클래스 다이어그램 (0) | 2024.07.14 |
| 객체와 클래스 (0) | 2024.06.23 |
| 자바의 변수들(일반 변수, 참조 변수) (0) | 2024.06.23 |
| JAVA에 대하여 (2) | 2024.06.16 |