728x90
728x90
자바 OOP 다형성: 깊이 있게 파헤치는 상세 가이드
다형성이란 무엇일까요?
**다형성(Polymorphism)**이란 하나의 객체나 메소드가 여러 가지 타입을 가질 수 있는 성질을 의미합니다. 마치 같은 단어가 문맥에 따라 다른 의미를 가질 수 있는 것처럼, 프로그래밍에서도 다형성을 통해 코드의 유연성과 재사용성을 높일 수 있습니다.
쉽게 말해, 다형성은 다양한 객체들을 하나의 공통된 타입으로 다룰 수 있게 해주는 강력한 도구입니다.
자바에서 다형성 구현하기
자바에서 다형성은 주로 다음과 같은 방법으로 구현됩니다.
1. 오버로딩 (Overloading)
- 같은 이름의 메소드를 여러 개 정의하는 것으로, 매개변수의 개수나 타입이 다르면 같은 이름의 메소드를 여러 개 만들 수 있습니다.
- 컴파일 시에 호출할 메소드가 결정됩니다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
2. 오버라이딩 (Overriding)
- 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것입니다.
- 메소드의 이름, 매개변수, 반환 타입이 부모 클래스의 메소드와 완전히 같아야 합니다.
- 실행 시에 실제 객체의 타입에 따라 호출될 메소드가 결정됩니다.
class Animal {
public void sound() {
System.out.println("동물의 소리");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
3. 업캐스팅 (Upcasting)
- 자식 클래스의 객체를 부모 클래스 타입의 참조 변수에 할당하는 것입니다.
- 자동으로 이루어지며, 부모 클래스에서 정의된 메소드만 호출할 수 있습니다.
Animal animal = new Dog(); // Dog 객체를 Animal 타입으로 업캐스팅
animal.sound(); // "멍멍" 출력
4. 다운캐스팅 (Downcasting)
- 부모 클래스 타입의 참조 변수를 자식 클래스 타입으로 강제 변환하는 것입니다.
- 명시적으로 형 변환을 해야 하며, 잘못된 타입으로 변환하면 ClassCastException이 발생할 수 있습니다.
- 자식 클래스에서 추가된 메소드를 호출할 수 있습니다.
Animal animal = new Dog();
Dog dog = (Dog) animal; // 다운캐스팅
dog.sound(); // "멍멍" 출력
다형성의 장점
- 코드의 재사용성 증가: 부모 클래스를 기반으로 다양한 자식 클래스를 만들어 재사용할 수 있습니다.
- 유연한 프로그래밍: 다양한 객체를 하나의 인터페이스로 다룰 수 있어 프로그램의 확장성을 높입니다.
- 코드의 가독성 향상: 추상적인 개념을 사용하여 코드를 간결하게 표현할 수 있습니다.
다형성 활용 예시
- 다양한 종류의 도형 그리기: Shape 클래스를 상속받는 Circle, Rectangle 등의 클래스를 만들어 다양한 도형을 그릴 수 있습니다.
- 다양한 종류의 동물 소리 내기: Animal 클래스를 상속받는 Dog, Cat 등의 클래스를 만들어 각 동물의 소리를 내게 할 수 있습니다.
- 다양한 종류의 데이터 처리: ArrayList, LinkedList 등의 클래스를 사용하여 다양한 데이터를 저장하고 처리할 수 있습니다.
결론
다형성은 객체지향 프로그래밍에서 매우 중요한 개념입니다. 다형성을 잘 활용하면 코드의 유연성과 재사용성을 높이고, 더욱 효율적인 프로그램을 개발할 수 있습니다.
추가적으로 알아두면 좋은 점
- 인터페이스: 다형성을 구현하는 또 다른 방법으로, 인터페이스를 사용하여 클래스 간의 관계를 정의할 수 있습니다.
- 추상 클래스: 추상 메소드를 포함하는 클래스로, 자식 클래스에서 반드시 구현해야 하는 메소드를 정의할 수 있습니다.
- 다형성과 관련된 예외: ClassCastException, NullPointerException 등 다형성 사용 시 발생할 수 있는 예외에 대해 알아두는 것이 좋습니다.
728x90
728x90
'Java를 배워보자 > 3. 객체 지향 프로그래밍 (OOP)' 카테고리의 다른 글
자바 OOP 패키지 (0) | 2024.09.26 |
---|---|
자바 OOP 추상 클래스와 인터페이스 (0) | 2024.09.26 |
자바 OOP 상속 (0) | 2024.09.26 |
자바 OOP 접근 제한자 (0) | 2024.09.26 |
자바 OOP 생성자와 메소드 (0) | 2024.09.26 |