본문 바로가기
객체지향

[객체지향]다형성은 어떻게 코드로 구현되는가?

by seongjko 2025. 7. 9.
728x90

런타임 다형성:

  • 상속을 통해 메서드 오버라이딩을 소스코드에 구현해놓고 컴파일 후 실행
  • upcasting으로 자식 객체를 부모 객체 자료형에 넣으면 런타임에 동적 바인딩이 일어나서 다형성 실체화
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("야옹"); }  // 메서드 오버라이딩
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();  // 업캐스팅
        Animal animal2 = new Cat();  // 업캐스팅
        
        animal1.sound();  // "멍멍" - 동적 바인딩(런타임에 Dog의 메서드 호출)
        animal2.sound();  // "야옹" - 동적 바인딩(런타임에 Cat의 메서드 호출)
    }
}

 

 

컴파일 타임 다형성:

  • 메서드 오버로딩을 소스코드에 구현해놓고 컴파일 후 실행
  • 정적 바인딩을 통해 다형성 실체화
class Calculator {
    int add(int a, int b) {           // 메서드 오버로딩
        return a + b;
    }
    
    double add(double a, double b) {  // 메서드 오버로딩
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        
        calc.add(1, 2);      // 컴파일 시점에 int 버전 선택
        calc.add(1.5, 2.5);  // 컴파일 시점에 double 버전 선택
    }
}

 

전부 다 따로따로 머릿속에서 놀던 개념이었는데 이렇게 연결되니까 신기하다.

'객체지향' 카테고리의 다른 글

[객체지향]조합, 위임이 상속을 대체하는가?  (0) 2025.06.06