[JAVA] 다형성 polymorphism

현서황·2024년 9월 19일

JAVA

목록 보기
10/16

동일한 이름의 메서드나 클래스가 서로 다른 형태로 동작할 수 있는 성질

다형성 덕분에 객체가 여러가지 형태를 가질 수 있어, 코드를 더 유연하고 확장성 있게 작성할 수 있다.
자바에서는 주로 상속, 인터페이스를 통해 다형성을 구현한다.


1. static polymorphism

메서드 오버로딩(method overloading)으로 구현된다. 이는 같은 이름의 메서드가 다른 매개변수를 받아 동작하는 형태이다.

class Calculator {
    // 두 정수를 더하는 메서드
    public int add(int a, int b) {
        return a + b;
    }

    // 세 정수를 더하는 메서드
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

add라는 메서드는 같은 이름을 가지고 있지만, 서로 다른 매개변수로 호출되어 다르게 동작한다.


2. Dynamic Polymorphism

메서드 오버라이딩(method overriding)과 관련이 있다.
이는 상속관계에서 부모 클래스의 메서드를 자식 클래스가 재정의하여, 부모 타입의 참조 변수가 자식 객체를 가리킬 때, 자식 클래스의 메서드가 실행되는 방식이다.

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

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("개가 짖습니다.");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("고양이가 웁니다.");
    }
}

Dog, Cat클래스는 Animal클래스를 상속받아 sound()메서드를 오버라이딩하고있다. 다형성을 통해 부모 타입인 Animal 참조 변수가 여러 자식 객체를 가리킬 수 있다.

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.sound();  // 개가 짖습니다.
        myCat.sound();  // 고양이가 웁니다.
    }
}

다형성의 장점

  • 유연성 : 동일한 코드가 다양한 형태로 동작할 수 있어, 코드 재사용성이 높아진다.
  • 확장성 : 새로운 기능을 추가할 때 기존 코드를 수정할 필요 없이 확장이 가능하다.
  • 가독성 : 인터페이스나 부모 클래스를 통해 구현 세부 사항을 감출 수 있어, 더 명확하고 읽기 쉬운 코드를 작성할 수 있다.
profile
노는 게 제일 좋은 뽀로로

0개의 댓글