본문 바로가기
Study

[Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) - 다형성 (4)

by jisayDeveloper 2023. 10. 17.
728x90
반응형
SMALL

저번 포스팅인 캡슐화에 이어서 다형성에 대해 포스팅 하겠습니다.

https://jisaydeveloper.tistory.com/27

 

[Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) - 캡슐화 (3)

저번 포스팅인 상속에 이어서 캡슐화에 대해서 포스팅 하겠습니다. https://jisaydeveloper.tistory.com/26 [Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) - 상속 (2) 추상화에 이어서 상속을 알아보

jisaydeveloper.tistory.com

정의

다형성은 "다양한 형태"를 의미하며, 객체 지향 프로그래밍에서 다양한 객체를 일반적인 방법으로 처리하는 능력을 나타냅니다. 이것은 코드의 유연성, 재사용성 및 확장성을 높이는 데 중요한 역할을 합니다.

정의를 조금 쉽게 풀이하자면 같은 이름의 메서드나 변수를 사용하여 여러 종류의 객체를 다룰 수 있게 하는 것입니다. 

예를 들어, 동일한 메서드명을 가진 여러 클래스가 있을 때, 이 메서드는 각 클래스에서 다르게 동작할 수 있습니다. 다형성을 통해 이 메서드를 호출할 때 객체의 실제 타입에 따라 해당 객체의 메서드가 실행됩니다.

 

주요개념

  • 부모 클래스와 하위 클래스 (Inheritance): 다형성은 주로 상속(Inheritance)을 기반으로 동작합니다. 부모 클래스는 보다 일반적인 특성을 가지며 하위 클래스는 보다 구체적인 특성을 추가합니다. 
  • 메서드 오버라이딩 (Method Overriding): 하위 클래스는 부모 클래스에서 정의된 메서드를 재정의할 수 있습니다. 이것은 다형성의 핵심입니다. 하위 클래스에서 메서드를 재정의하면, 해당 메서드를 호출할 때 객체의 실제 형태에 따라 실행됩니다. 
  • 인터페이스 (Interface): 다형성을 구현하는 또 다른 방법은 인터페이스를 사용하는 것입니다. 인터페이스는 메서드 시그니처를 정의하고, 클래스는 이러한 인터페이스를 구현하여 해당 메서드를 제공해야 합니다.

정의에서 코드의 유연성과 재사용성 및 확장성의 장점이 있다고 했는데 이는 예제 코드를 통해 보여드리겠습니다.

class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 내고 있습니다.");
    }
}

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

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("고양이가 야옹하고 있습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 다형성 적용
        Animal myCat = new Cat(); // 다형성 적용

        myDog.makeSound(); // "개가 짖고 있습니다." 출력
        myCat.makeSound(); // "고양이가 야옹하고 있습니다." 출력
    }
}

이 예제에서 myDog 및 myCat은 모두 Animal 클래스의 인스턴스이지만, 실제로 Dog 및 Cat 클래스의 인스턴스를 참조합니다. 

 

상위 클래스와 하위 클래스는 상속 관계여야하고 다형성이 보장되기 위해 오버라이딩(하위 클래스 메서드의 재정의)이 반드시 필요합니다.

 

자식 클래스의 객체가 부모 클래스의 타입으로 형변환(업캐스팅)해야 한다.

 

다형성은 객체 지향 프로그래밍에서 중요한 개념으로, 객체들을 유연하게 다루고 재사용 가능한 코드를 작성하는데 도움을 줍니다. 위의 설명과 예제를 참고하여 다형성의 개념을 이해하고, 이를 활용하여 보다 효율적이고 유연한 코드를 작성하는데 활용할 수 있을 것입니다.

 

 

728x90
반응형
LIST