자바 다형성
IT 위키
자바 다형성(Java Polymorphism, 多形性)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 동일한 인터페이스나 상위 클래스 타입을 통해 서로 다른 클래스의 객체를 일관되게 다룰 수 있는 성질을 의미한다.
1 개요[편집 | 원본 편집]
다형성은 "하나의 인터페이스로 여러 형태의 객체를 처리할 수 있다"는 원리를 바탕으로 하며, 코드의 유연성과 확장성을 크게 향상시킨다. 자바에서는 주로 메서드 오버라이딩과 업캐스팅을 통해 다형성을 구현한다.
2 다형성의 종류[편집 | 원본 편집]
- 컴파일 타임 다형성 (정적 다형성): 메서드 오버로딩을 통해 구현
- 런타임 다형성 (동적 다형성): 메서드 오버라이딩 및 업캐스팅을 통해 구현
3 예제: 런타임 다형성[편집 | 원본 편집]
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹!");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.sound(); // 출력: 야옹!
a2.sound(); // 출력: 멍멍!
}
}
4 업캐스팅과 다운캐스팅[편집 | 원본 편집]
- 업캐스팅(Upcasting): 하위 클래스 객체를 상위 클래스 타입으로 참조
- 다운캐스팅(Downcasting): 상위 클래스 타입의 참조를 하위 클래스 타입으로 변환 (명시적 캐스팅 필요)
Animal a = new Dog(); // 업캐스팅
Dog d = (Dog) a; // 다운캐스팅
d.sound(); // 출력: 멍멍!
5 인터페이스를 통한 다형성[편집 | 원본 편집]
자바 인터페이스를 활용하면 클래스 간의 강한 결합을 피하면서 다형성을 구현할 수 있다.
interface Speaker {
void speak();
}
class Human implements Speaker {
public void speak() {
System.out.println("사람이 말합니다.");
}
}
class Robot implements Speaker {
public void speak() {
System.out.println("로봇이 말합니다.");
}
}
public class Main {
public static void main(String[] args) {
Speaker s1 = new Human();
Speaker s2 = new Robot();
s1.speak(); // 출력: 사람이 말합니다.
s2.speak(); // 출력: 로봇이 말합니다.
}
}
6 장점[편집 | 원본 편집]
- 코드의 재사용성 증가
- 시스템 확장성 향상
- 인터페이스 기반 설계 가능
- 실행 시간에 객체에 따라 다른 동작 수행 가능
7 관련 키워드[편집 | 원본 편집]
- 오버라이딩
- 오버로딩
- 업캐스팅
- 인터페이스
- 동적 바인딩
8 같이 보기[편집 | 원본 편집]
9 참고 문헌[편집 | 원본 편집]
- Joshua Bloch, *Effective Java*, Addison-Wesley, 2018.
- Herbert Schildt, *Java: The Complete Reference*, McGraw-Hill Education, 2021.