Base

다형성

Dr.Mlem 2024. 9. 24. 12:13
프로그래밍에서, 다형성이라는 말에 대해서 풀어서 설명해줄 수 있겠어?
 
ChatGPT
Thought for 11 seconds

프로그래밍에서 **다형성(多形性)**은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 하나의 인터페이스나 클래스가 여러 형태로 구현되어 다양한 방식으로 동작할 수 있는 성질을 의미합니다. 즉, 동일한 메서드나 인터페이스를 사용하지만, 그 실제 동작은 객체의 타입에 따라 달라집니다.

다형성의 종류:

  1. 컴파일 시간 다형성(Static Polymorphism):
    • 메서드 오버로딩(Method Overloading): 동일한 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 개 정의하는 것.
    • 예시:
      java
       
      class Calculator {
          int add(int a, int b) {
              return a + b;
          }

          double add(double a, double b) {
              return a + b;
          }
      }
  2. 런타임 다형성(Dynamic Polymorphism):
    • 메서드 오버라이딩(Method Overriding): 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것.
    • 예시:

      java
       
      class Animal {
          void sound() {
              System.out.println("동물이 소리를 냅니다.");
          }
      }

      class Dog extends Animal {
          @Override
          void sound() {
              System.out.println("멍멍!");
          }
      }

      class Cat extends Animal {
          @Override
          void sound() {
              System.out.println("야옹!");
          }
      }

다형성의 활용:

  • 유연한 코드 작성: 다형성을 통해 다양한 객체를 동일한 인터페이스나 부모 클래스로 다룰 수 있어 코드의 유연성이 높아집니다.
  • 유지보수 용이: 새로운 기능이나 클래스 추가 시 기존 코드를 수정하지 않고도 확장이 가능합니다.
  • 코드 재사용성 증가: 공통된 인터페이스나 클래스를 통해 코드를 재사용할 수 있습니다.

실제 예시 코드:


java
 
public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.sound(); // 출력: 멍멍!
        animal2.sound(); // 출력: 야옹!

        // 배열을 사용한 다형성 예시
        Animal[] animals = { new Dog(), new Cat() };

        for (Animal animal : animals) {
            animal.sound(); // 각 객체에 맞는 sound() 메서드가 호출됩니다.
        }
    }
}

위의 코드에서 Animal 타입의 배열에 Dog와 Cat 객체를 담아 반복문을 통해 sound() 메서드를 호출하면, 각 객체에 재정의된 메서드가 실행됩니다. 이는 다형성을 활용하여 코드의 간결함과 유연성을 높인 대표적인 예입니다.

정리하자면, 다형성은 객체 지향 프로그래밍에서 코드의 확장성과 유지보수성을 높여주는 중요한 개념으로, 프로그램을 설계하고 구현할 때 필수적으로 이해해야 하는 요소입니다.

'Base' 카테고리의 다른 글

컴파일 언어의 배열 사이즈  (0) 2024.09.24
해시값, 해시 코드  (0) 2024.09.24
IS A 관계  (0) 2024.09.23
클래스 다이어그램에서 리턴타입 void의 생략  (0) 2024.09.23
점화식  (0) 2024.09.23