자바의 다형성(polymorphism)

다형성

  • 객체가 여러 형태로 참조될 수 있는 능력
    • 하나의 객체를 여러 타입의 참조 변수로 참조 가능
    • “많은 형태를 가진다”는 의미
  • 객체지향 프로그래밍의 중요한 특성
    • 유연하고 확장성 있는 코드 설계 가능
    • 코드 재사용성과 유지보수성 향상
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