SIMPOLOR
단순하고 색있게
다형성(Polymorphism)
단순색
·
2024년 06월 26일
Java
## 다형성(Polymorphism)이란? 다형성은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 같은 인터페이스나 부모 클래스에 대해 `서로 다른 구현을 가진 객체들이 동일한 방식으로 호출될 수 있는 능력을 의미`합니다. 다형성을 통해 코드의 유연성과 확장성을 높일 수 있습니다. ## 다형성의 기본 개념 ### 컴파일 시간 다형성 (Compile-time Polymorphism) 주로 메서드 오버로딩을 통해 구현됩니다. 같은 이름의 메서드가 매개변수의 유형이나 수에 따라 다르게 동작합니다. ### 런타임 다형성 (Runtime Polymorphism) 메서드 오버라이딩을 통해 구현됩니다. 자식 클래스에서 부모 클래스의 메서드를 재정의하여 다르게 동작하도록 합니다. ## 다형성 예제 ``` // 부모 클래스 정의 class Animal { public void makeSound() { System.out.println("Some generic animal sound"); } } // 자식 클래스 정의 class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark"); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow"); } } public class Main { public static void main(String[] args) { // 다형성을 통한 객체 생성 Animal myDog = new Dog(); Animal myCat = new Cat(); // 같은 타입(Animal)으로 다른 구현(Dog, Cat) 호출 myDog.makeSound(); // 출력: Bark myCat.makeSound(); // 출력: Meow // 다형성을 활용한 배열 Animal[] animals = {new Dog(), new Cat(), new Animal()}; for (Animal animal : animals) { animal.makeSound(); } /*** 출력결과: Bark Meow Some generic animal sound */ } } ``` 1. **Animal 클래스**(부모 클래스)는 makeSound() 메서드를 정의합니다. 이 메서드는 모든 동물이 가질 수 있는 일반적인 소리를 출력합니다. 2. **Dog와 Cat 클래스**(자식 클래스)는 Animal 클래스를 상속받아 makeSound() 메서드를 오버라이딩합니다. 각 클래스는 고유의 소리를 출력하도록 makeSound() 메서드를 재정의합니다. 3. **Animal 타입의 참조 변수**를 사용하여 Dog와 Cat 객체를 생성합니다. 이를 통해 동일한 makeSound() 메서드 호출이 각 객체에 맞게 다르게 동작합니다. 4. **Animal 타입의 배열**을 만들어 다양한 동물 객체를 저장하고, 반복문을 통해 각 객체의 makeSound() 메서드를 호출합니다. 각 객체는 자신에게 맞는 소리를 출력합니다. ## 다형성의 장점 ### 코드 유연성 다양한 객체가 동일한 인터페이스나 부모 클래스를 통해 호출될 수 있어 코드의 유연성이 높아집니다. ### 코드 확장성 새로운 클래스가 추가되더라도 기존 코드를 수정하지 않고 확장할 수 있습니다. ### 유지보수 용이성 코드 변경이 적어 유지보수가 용이합니다. ## 다형성의 사용 사례 ### 그래픽 시스템 다양한 도형 객체(원, 사각형 등)를 공통 인터페이스를 통해 그리는 메서드 호출 ### 지불 시스템 다양한 지불 방식(신용카드, 페이팔 등)을 공통 인터페이스를 통해 지불 처리 ## 마무리 다형성은 객체 지향 프로그래밍에서 코드의 재사용성과 관리성을 높이는 중요한 기능입니다. 다양한 구현을 동일한 방식으로 다룰 수 있어 프로그래밍의 유연성과 확장성을 극대화할 수 있습니다.
연관 포스트
BigDecimal 클래스
Java jar 실행 옵션
캡슐화(Encapsulation)
추상화(Abstraction)
상속(Inheritance)