회원가입

다형성 - 시작

Beany 2024-10-07

ChatGPT 요약

다형성은 객체지향 프로그래밍의 중요한 특성 중 하나로, 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 의미합니다. 다형성을 이해하고 활용하기 위해 다형적 참조와 메서드 오버라이딩을 알아야 합니다. 다형적 참조는 부모 타입의 변수가 자식 타입을 참조할 수 있는 성질을 말합니다. 따라서 한 객체가 여러 형태를 참조할 수 있습니다. 이를 통해 객체의 유연한 활용이 가능합니다.

다형성 시작


객체지향 프로그래밍의 대표적인 특징으로는 캡슐화, 상속, 다형성이 있다. 그 중에서 다형성은 객체지향 프로그래밍의 꽃이라 불린다. 앞서 학습한 캡슐화나 상속은 직관적으로 이해하기 쉽다. 반면에 다형성은 제대로 이해하기도 어렵고, 잘 활용하기는 더 어렵다. 하지만 좋은 개발자가 되기 위해서는 다형성에 대한 이해가 필수다.

 

다형성(Polymorphism)은 이름 그대로 "다양한 형태", "여러 형태"를 뜻한다.
프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻한다. 보통 하나의 객체는 하나의 타입으로 고정되어있다. 그런데 다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다는 뜻이다. 지금은 이 내용을 이해하기 보다는 참고만 해두자.

이제부터 본격적으로 다형성을 학습해보자.

 

다형성을 이해하기 위해서는 크게 2가지 핵심 이론을 알아야 한다.

  • 다형적 참조
  • 메서드 오버라이딩

먼저 다형적 참조라 불리는 개념에 대해 알아보자.

 

 

다형적 참조


다형적 참조를 이해하기 위해 다음과 같은 간단한 상속 관계를 코드로 만들어보자.

부모와 자식이 있고, 각각 다른 메서드를 가진다.

package poly.basic;

public class Parent {
    public void parentMethod() {
        System.out.println("Parent method");
    }
}
package poly.basic;

public class Child extends Parent {
    public void childMethod() {
        System.out.println("Child method");
    }
}
package poly.basic;

public class PolyMain {
    public static void main(String[] args) {
        // 부모 변수가 부모 객체를 참조
        Parent parent = new Parent();
        parent.parentMethod();

        // 자식 변수가 자식 객체를 참조
        Child child = new Child();
        child.parentMethod();
        child.childMethod();

        // 부모 변수가 자식 객체를 참조
        // 다형성
        Parent poly = new Child();
        poly.parentMethod();
        // poly.childMethod(); // 컴파일 에러
    }
}
Parent method
Parent method
Child method
Parent method

부모는 자식을 담을 수 있다.

  • 부모 타입은 자식 타입을 담을 수 있다.
  • Parent poly 는 부모 타입이다. new Child() 를 통해 생성된 결과는 Child 타입이다. 자바에서 부모 타입은 자식 타입을 담을 수 있다!
  • 반대로 자식 타입은 부모 타입을 담을 수 없다.

 

다형적 참조

지금까지 학습한 내용을 떠올려보면 항상 같은 타입에 참조를 대입했다. 그래서 보통 한 가지 형태만 참조할 수 이싿.

  • Parent parent = new Parent()
  • Child child = new Child()

그런데 Parent 타입의 변수는 다음과 같은 자신인 Parent 는 물론이고, 자식 타입까지 잠조할 수 있다. 만약 손자가 있다면 손자도 그 하위 타입도 참조할 수 있다.

  • Parent poly = new Parent()
  • Parent poly = new Child()
  • Parent poly = new Grandson() : Child 하위에 손자가 있다면 가능

자바에서 부모 타입은 자신은 물론이고, 자신을 기준으로 모든 자식 타입을 참조할 수 있다. 이것이 바로 다양한 형태를 참조할 수 있다고 해서 다형적 참조라 한다.

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 210