Programming/Java

자바의 다형성

vita12321 2023. 7. 29. 16:04
728x90
반응형

자바의 다형성(Polymorphism) 객체 지향 프로그래밍의 핵심 개념 하나로, 여러 클래스 또는 인터페이스의 객체가 동일한 인터페이스를 충족하면서 서로 다른 동작을 수행할 있게 하는 기능입니다. 다형성을 통해 코드의 유연성과 확장성을 높일 있습니다. 이번 글에서는 자바의 다형성에 대해 자세히 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.


 

1. 다형성의 개념 장점

 

다형성의 가장 장점은 다양한 객체를 같은 타입으로 처리할 있다는 것입니다. , 여러 클래스가 동일한 메서드를 구현하는 인터페이스를 가지면, 클래스들의 객체를 동일한 참조 변수로 처리할 있을 뿐만 아니라 동일한 인터페이스를 통해 메서드를 호출할 있습니다. 이는 코드의 유연성을 높이고, 확장성을 증가시키는 것을 가능하게 하는데, 이로 인해 다음과 같은 장점이 발생합니다.

 

  • 코드의 재사용성이 높아집니다. 같은 인터페이스를 여러 객체로 구현하고 보다 쉽게 대체하여 사용할 수 있기 때문입니다.

  • 중복 코드를 줄일 수 있습니다. 새로운 구현을 간단하게 추가할 수 있으며, 기존 코드는 건드릴 필요가 없어집니다.

  • 유지 보수가 쉬워집니다. 기존 코드를 수정하거나 기능을 추가할 때, 다만 필요한 곳에 손을 대면 됩니다.

 

2. 자바 다형성 구현 사용

 

자바에서 다형성을 구현하기 위해서는 다음과 같은 방법들을 사용할 있습니다.

 

  • 추상 클래스(Abstract Class)와 인터페이스(Interface) 사용
  • 메서드 오버로딩(Method Overloading)
  • 메서드 오버라이딩(Method Overriding)

 

예제로 설명하면 아래와 같습니다.

 

// 인터페이스 정의

interface Animal {

    void speak(); // 모든 동물이 구현해야 하는 공통 메서드

}
// 인터페이스를 구현하는 클래스 정의

class Dog implements Animal {

    @Override

    public void speak() {

        System.out.println("멍멍!");

    }

}

 

class Cat implements Animal {

    @Override

    public void speak() {

        System.out.println("야옹!");

    }

}

 

public class Main {

    public static void main(String[] args) {

        Animal myDog = new Dog(); // 다형성에 의해 Dog를 Animal로 할당

        Animal myCat = new Cat(); // 다형성에 의해 Cat를 Animal로 할당

 

        myDog.speak(); // "멍멍!"

        myCat.speak(); // "야옹!"

    }

}

 

위의 예제에서 Animal 공통 인터페이스이며, Dog Cat 서로 다른 클래스지만 Animal 인터페이스를 구현합니다. 이를 통해, 새로운 동물 클래스를 추가할 기존 코드를 수정하지 않고 간단하게 애플리케이션에 새로운 기능을 추가할 있습니다.


 

3. 다형성 예제

 

자동차를 나타내는 추상 클래스를 정의하고, 여러 종류의 엔진을 가진 자동차 클래스를 구현해보겠습니다. 예제에서 해당 추상 클래스는 여러 엔진의 종류에 따라 Engine 인터페이스를 다르게 구현하여 클래스를 생성할 것입니다.

 

// 추상 클래스 정의

abstract class AbstractCar {

    void startEngine() {

        System.out.println("자동차 엔진을 켭니다.");

    }

}
// 인터페이스 정의

interface Engine {

    void run();

}
// 인터페이스를 구현하는 클래스 정의

class GasolineEngine implements Engine {

    @Override

    public void run() {

        System.out.println("가솔린 엔진이 작동합니다.");

    }

}

 

class ElectricEngine implements Engine {

    @Override

    public void run() {

        System.out.println("전기 엔진이 작동합니다.");

    }

}

 

class Car extends AbstractCar {

    private Engine engine;

 

    public Car(Engine engine) {

        this.engine = engine;

    }

 

    @Override

    void startEngine() {

        super.startEngine();

        this.engine.run(); // 엔진 종류에 따라 다른 동작 수행

    }

}

 

public class Main {

    public static void main(String[] args) {

        Car gasCar = new Car(new GasolineEngine());

        Car electricCar = new Car(new ElectricEngine());

 

        gasCar.startEngine(); // 가솔린 엔진이 작동합니다.

        electricCar.startEngine(); // 전기 엔진이 작동합니다.

    }

}

 

 

자바 다형성을 통해 프로젝트의 규모가 커져도 코드의 유연성과 확장성을 향상시킬 있으며, 효율적인 협업이 가능해집니다.

728x90
반응형