객체지향 모델의 다형성 (Polymorphism)

1. 코드 유연성 극대화, 객체지향 모델의 다형성의 개념/특징

(1) 다형성 (Polymorphism)의 개념

개념도개념
다형성 개념같은 메시지(메서드 호출)에 대해 객체의 타입에 따라 다른 동작을 수행하는 객체지향 모델의 특성

(2) 다형성의 특징

동적바인딩– 프로그램이 실행되는 시점에 호출할 번지나 함수 연결
확장성 지원– 수평적 확장성인 Overloading과 수직적 확장성인 Overriding 지원
재사용성 지원– 기존에 구현된 부분은 동일하게 사용하고 필요한 부분만 수정하여 활용 가능
  • 다형성은 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 재사용성 및 수평/수직적 확장성 향상

 

2. 다형성의 유형, 오버로딩과 오버라이딩

(1) 오버로딩(Overloading, 중첩)의 개념/사례

  • 클래스(객체) 내부에서 반환 값이 같은 동일 이름의 메서드를 파라미터의 개수와 각 파라미터의 타입을 다르게 하여 정의하는 기법
  • 오버로딩의 코드 사례
class Calculator {
    // ① int형 2개 더하기
    int add(int a, int b) {
        return a + b;
    }

    // ② 중첩: int형 3개 더하기
    int add(int a, int b, int c) {
        return a + b + c;
    }

    // ③ 중첩: double형 2개 더하기
    double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(5, 10));         // ① 메서드 호출
        System.out.println(calc.add(5, 10, 15));     // ② 메서드 호출
        System.out.println(calc.add(5.5, 10.5));     // ③ 메서드 호출
    }
}
  • 오버로딩은 같은 클래스 내에서 적용되고, 컴파일 하는 시간에 결정되는 정적 바인딩 적용

(2) 오버라이딩(Overriding, 재정의)의 개념/사례

  • 상속 관계의 클래스에서 상위 클래스의 메서드를 하위 클래스에서 재정의하여 객체에 따라 같은 이름의 다른 기능을 정의하는 기법
  • 오버라이딩 코드 사례
class Animal {
    void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("The dog says: Bark!");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("The cat says: Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        // Animal Class를 참조하지만 객체는 자식 클래스
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.makeSound(); // Dog Class의 makeSound 메서드 호출
        myCat.makeSound(); // Cat Class의 makeSound 메서드 호출
    }
}
  • 어노테이션 @Override 는 명시적으로 사용할 수 있으나, 컴파일러가 체크하기 때문에 생략 가능
  • 오버로딩과 오버라이딩은 다형성을 제공하기 위한 기법으로 활용되나 목적과 방법에서 차이 존재

 

3. 다형성 유형인 오버로딩과 오버라이딩 비교

구분오버로딩(Overloading)오버라이딩(Overriding)
개념같은 이름의 Method 여러 개 사용상위 클래스의 Method 재정의
사용 방법동일 Class 내 메서드 중첩하위 Class에서 메서드 재정의
메서드 이름동일동일
매개변수개수가 동일한 경우, 타입 상이동일
리턴 타입무관동일
어노테이션미사용@Overriding
확장성수평적 확장수직적 확장
  • 다형성을 통해 단일 인터페이스를 통한 기능의 확장이 편리해지며, 메소드의 규격화가 가능해지므로 캡슐화와 연결되어 다양한 역할과 기능 수행
  • 오버로딩, 오버라이딩 외 캐스팅을 통해 상속받은 객체의 형변환 수행도 가능

 
[참고]

  • 리프레임, 최은만, 객체지향 설계와 패턴 워크북, 2024.2

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^