객체지향 프로그래밍에서 다형성(Polymorphism)은 중요한 개념 중 하나로,
객체가 여러 형태를 가질 수 있는 특성을 의미합니다.
다형성은 객체지향 프로그래밍의 네 가지 주요 특성 중 하나로서,
코드의 재사용성과 유지보수성을 높이는 데 기여합니다.
### 다형성의 정의
다형성은 같은 이름의 메서드나 함수가 입력에 따라 다르게 동작할 수 있는 능력을 의미합니다.
즉, 다형성은 같은 인터페이스에 대해 서로 다른 구현을 제공할 수 있게 합니다.
이는 상속과 관련이 깊으며, 상위 클래스나 인터페이스를 사용하여
다양한 하위 클래스나 구현 클래스를 제어할 수 있는 유연성을 제공합니다.
### 다형성의 형태
1. **메서드 오버로딩 (Method Overloading)**:
- 같은 이름의 메서드가 매개변수의 타입, 개수에 따라 다르게 정의될 수 있는 기능입니다.
컴파일러가 메서드 호출 시 인자의 타입과 개수에 따라 올바른 메서드를 선택하게 됩니다.
2. **메서드 오버라이딩 (Method Overriding)**:
- 상위 클래스에서 정의된 메서드를 하위 클래스에서 같은 이름으로 재정의하는 것을 말합니다.
이는 상속을 통해 구현됩니다. 상위 클래스의 메서드를 하위 클래스에서 필요에 맞게 재정의하여 사용할 수 있습니다.
3. **업캐스팅 (Upcasting) / 다운캐스팅 (Downcasting)**:
- 업캐스팅은 하위 클래스의 인스턴스를 상위 클래스 타입으로 형변환하는 것을 말합니다.
이는 다형성을 활용하여 다양한 타입의 객체를 동일한 인터페이스로 다룰 수 있게 합니다.
- 다운캐스팅은 업캐스팅된 객체를 다시 원래의 하위 클래스 타입으로 변환하는 것을 의미합니다.
이 과정에서 형변환 연산자를 사용하며, 이 작업은 실행 시점에 타입 안전성을 검사하게 됩니다.
### 다형성의 장점
- **코드 재사용성**: 같은 인터페이스를 사용하여 다양한 구현을 적용할 수 있어 코드의 재사용성이 높아집니다.
- **유지보수성**: 코드의 유연성이 증가하며, 새로운 구현이나 기능 추가 시 기존 코드를 변경하지 않고도 확장할 수
있는 장점이 있습니다.
- **가독성**: 인터페이스와 구현 클래스의 분리로 코드가 더욱 명확해지고 가독성이 좋아집니다.
### 예시
위 예제에서 `Animal` 인터페이스를 구현한 `Dog`와 `Cat` 클래스는 각각 다른 소리를 내도록 `makeSound` 메서드를 재정의하고 있습니다. 이를 통해 `Animal` 타입으로 선언된 변수에 실제 객체를 대입하고 다형성을 활용하여 각 객체의 동작을 다르게 수행할 수 있습니다.
다형성은 객체지향 프로그래밍의 중요한 특성 중 하나로, 유연하고 확장 가능한 소프트웨어를 설계하는 데 필수적인 개념입니다.
'##JAVA' 카테고리의 다른 글
객체를 대상으로 클래스 작성해보기 (0) | 2024.07.08 |
---|---|
GC<가비지 컬렉터> (예외, IO, 제네릭 복습) (0) | 2024.07.08 |
클래스와 다이어그램 (0) | 2024.07.08 |
객체와 클래스 (0) | 2024.07.08 |
참조변수와 일반변수 (0) | 2024.06.24 |