프로그래밍 공부

객체지향 프로그래밍(다형성) 본문

Programming/JAVA

객체지향 프로그래밍(다형성)

khj1999 2024. 10. 8. 08:16

다형성

  • 다형성(Polymorphism)은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 동일한 인터페이스를 통해 서로 다른 데이터 타입의 객체를 처리할 수 있는 능력을 의미함.
  • 자바에서 다형성은 주로 두 가지 형태로 구현: 컴파일 타임 다형성과 런타임 다형성.

1. 컴파일 타임 다형성 (Static Polymorphism)

  • 컴파일 타임 다형성은 메서드 오버로딩(Method Overloading)과 연관됨.
  • 동일한 이름을 가진 메서드가 매개변수의 유형이나 개수에 따라 다르게 동작하는 것을 의미.

예시:

class MathUtils {
    // 메서드 오버로딩
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

위의 예에서 add 메서드는 두 개의 정수를 더하는 버전과 두 개의 실수를 더하는 버전이 있음.
호출 시에 매개변수의 유형에 따라 적절한 메서드가 선택됨.

2. 런타임 다형성 (Dynamic Polymorphism)

  • 런타임 다형성은 메서드 오버라이딩(Method Overriding)과 관련이 있음.
    부모 클래스의 메서드를 자식 클래스에서 재정의하여, 부모 클래스 타입의 참조 변수가 자식 클래스의
    객체를 참조할 때, 자식 클래스의 메서드가 호출되는 현상입니다.

예시:

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

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

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

public class Main {
    public static void main(String[] args) {
            // 반복문
            Animal pets = {new Dog(), new Cat()};
              for(Animal pet : pets){
                      pet.sound();// 출력: Dog barks, Cat meows
              }

            // 변수 선언
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.sound(); // 출력: Dog barks
        myCat.sound(); // 출력: Cat meows
    }
}

위 예제에서 Animal 클래스의 sound 메서드는 DogCat 클래스에서 각각 다르게 구현되었음.
Animal 타입의 참조 변수를 사용하여 각각의 자식 클래스 객체를 호출하면, 실제 객체의 타입에 따라
적절한 메서드가 실행됨.

다형성의 장점

  • 유연성: 코드의 유연성을 높이고, 다양한 객체를 동일한 방식으로 처리할 수 있어 코드 재사용성을 증가.
  • 확장성: 새로운 클래스 추가 시 기존 코드를 수정하지 않고도 기능을 추가할 수 있음.
  • 유지보수 용이: 코드가 더 간결해지고, 유지보수가 쉬워짐.

요약

  • 다형성은 객체지향 프로그래밍의 핵심 원칙 중 하나로, 프로그램의 구조를 더욱 유연하고
    확장 가능하게 만들어 줌.
Comments