본문 바로가기
언어/Java

[자바] + OOP 다형성

by taeung515 2025. 4. 18.

OOP의 다형성의 핵심은 같은 참조 타입으로 다양한 객체를 다룰 수 있다 라는 점이다.


예시코드

// 부모 클래스
class Animal {
    void sound() {
        System.out.println("Some generic animal sound");
    }
}

// 자식 클래스들
class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Woof! Woof!");
    }
}

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

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal; // 부모 클래스 타입 선언
        
        // 다형성을 통해 서로 다른 객체를 할당
        myAnimal = new Dog();
        myAnimal.sound(); // 출력: Woof! Woof!
        
        myAnimal = new Cat();
        myAnimal.sound(); // 출력: Meow!
    }
}

다형적 참조 (Polymorphic Reference)

상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조하는 것 (업캐스팅의 결과)

class Parent {
    void display() {
        System.out.println("Parent의 display 호출");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Child의 display 호출");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child(); // 다형적 참조
        obj.display();            // "Child의 display 호출" 출력
    }
}

 

메서드 오버라이딩 (Method Overriding)

상속받은 메서드를 자식 클래스에서 재정의하는 것

 

규칙 :

  1. 메서드 시그니처가 동일해야 한다.
  2. 접근 제어자는 부모 메서드보다 더 넓은 범위로 변경 가능하다.
  3. 반환 타입은 부모와 동일하거나, 부모 반환 타입의 하위타입 이어야 한다.
  4. 부모 메서드에 final이 있으면 오버라이딩 불가하다.'

오버라이딩 하지 않고 부모 변수 > 자식메서드 호출하려면 다운캐스팅 필요하나 메서드 오버라이딩이 되었다면 자바의 동적 바인딩(Dynamic Method Binding) 메커니즘을 통해 실체 객체의 타입을 기준으로 실행할 메서드가 결정된다 <> 정적 바인딩 private, static, final 메서드(오버라이딩 자체가 불가)


다형적 참조에서 가장 중요한 점은, 참조 변수의 타입에 따라 호출되는 메서드는 달라지지 않는다는 것이다. (재정의된 메서드!!!)

 

핵심:

1. 코드의 유연성이 증가:  부모클래스로 다양한 객체(자식)를 다룰 수 있다.

 

2. 런타임 다형성:  어떤 메서드가 호출될지는 객체의 타입에 따라 결정된다.

'언어 > Java' 카테고리의 다른 글

[자바] +자바 메모리 구조  (0) 2025.04.15
[자바] + 맵  (2) 2025.04.08