다형성
- 객체가 여러 형태로 참조될 수 있는 능력
- 하나의 객체를 여러 타입의 참조 변수로 참조 가능
- “많은 형태를 가진다”는 의미
- 객체지향 프로그래밍의 중요한 특성
- 유연하고 확장성 있는 코드 설계 가능
- 코드 재사용성과 유지보수성 향상
public interface Vegetarian{} // 채식 객체
public class Animal{} // 동물 객체
public class Deer extends Animal implements Vegetarian{} // 사슴 객체
Deer d= new Deer(); // 사슴으로서의 사슴
Animal a = d; // 동물로서의 사슴
Vegetarian v =d; // 채식동물로서의 사슴
Object o =d; // 객체로서의 사슴
- 사슴 객체는 다양한 형태로 참조 가능
- 모든 참조 변수가 같은 힙 메모리의 Deer 객체 가리킴
자바 다형성의 유형
1️⃣ 컴파일 타임 다형성
- 정적 다형성
- 메소드 오버로딩으로 구현
- 컴파일 시점에 결정
- 같은 이름, 다른 매개변수
public class Main {
// 두 정수를 더하는 메소드
public int addition (int x,int y){
return x+y ;
}
// 세 정수를 더하는 메소드
public int addition(int x, int y, int z){
return x+y+z;
}
// 두 실수를 더하는 메소드
public double addition (double x, double y){
return x+y;
}
}
- 같은 이름, 다른 매개변수 유형/개수
- 컴파일러가 어떤 메소드 호출할지 결정
2️⃣ 런타임 다형성
- 동적 다형성
- 메소드 오버라이딩으로 구현
- 실행 시점에 결정
- 동적 메소드 디스패치
class Vehicle{
public void displayInfo(){
System.out.println("이것은 차량입니다.");
}
}
class Car extends Vehicle{
@Override
public void displayInfo(){
System.out.println("이것은 자동차 입니다.");
}
}
Vehicle v= new Car(); // 업캐스팅
v.displayInfo(); // "이것은 자동차입니다." 출력
- 실행 시점에 객체의 실제 타입에 따라 결정
- 참조 변수 타입이 아닌 객체 타입의 메소드 호출
다형성의 이점
🔹 코드 재사용성
- 기존 클래스 확정 가능
- 중복 코드 감소
🔹 유연성
- 동일한 코드로 다양한 객체 처리
- 새로운 클래스 추가 용이
🔹 유지보수성
- 인터페이스 일관성 유지
- 코드 수정 범위 최소화
🔹 확장성
- 기존 코드 수정 없이 기능 추가
- 개방-폐쇄 원칙 준수
'Java' 카테고리의 다른 글
기본타입 (primitive type) (0) | 2025.05.01 |
---|---|
상속(inheritance) - JAVA (0) | 2025.05.01 |
Map.Entry (java.util) (0) | 2025.05.01 |
Comparable (java.lang), Comparator (java.util) (1) | 2025.04.30 |
Collection 프레임워크 (0) | 2025.04.29 |