다형성(Polymorphism)

Jihun Kim·2022년 4월 14일
0

기타

목록 보기
10/12

다형성(Polymorphism)

다형성이란 같은 모양의 코드가 서로 다른 행동을 하는 것을 말한다.

예를 들어, 키보드의 키를 사용하는 방법은 '누른다'이다. 그러나 같은 동작 방법을 가진 키의 종류는 다양한데 가령 ESC는 취소를, ENTER는 실행의 목적을 가지고 있다.
이처럼 다형성이란 동일한 조작방법으로 동작시키지만 동작 '방법'은 다른 것을 말한다. (by 생활코딩)
다형성을 사용하면 계층을 이루는 여러 클래스가 자신에게 맞는 유일한 메서드 버전을 구현할 수 있으며 여러 객체 타입을 하나의 타입으로 관리할 수 있어 유지보수에 좋다.

다형성은 크게 오버 라이딩과 오버 로딩의 개념으로 설명 된다.


오버 라이딩(Overriding)

  • 오버 라이딩을 하면 부모 클래스를 상속 받는 여러 자식 클래스들이 같은 이름으로 서로 다른 기능을 하는 메소드를 갖도록 만들 수 있다.
  • 이 때 부모 클래스는 추상 클래스로 만들 경우 @abstractmethod 데코레이터를 가진 1개 이상의 abstract method를 가져야 한다(이 부분은 다른 글에서 자세히 설명하도록 하겠다).
    - 해당 abstract method를 통해 메소드 내의 로직은 새롭게 정의되며 자식 클래스의 메소드끼리 서로 다른 기능을 하게 된다.
  • 위의 키보드 예시를 그대로 가져와 예를 들어 설명 하면, 키보드는 글을 쓰는 데 사용할 수도 있고 게임을 하기 위한 용도로 사용할 수도 있다.
    - 즉, 같은 키보드이지만 서로 다른 용도로 사용할 수 있다는 것이다.

오버 로딩(Overloading)

오버 로딩은 자바에서 사용되는 개념으로, 파이썬은 오버 로딩을 허용하지 않는다.

  • 오버 로딩은 하나의 클래스가 같은 이름의 메소드를 여러개 가질 수 있도록 하는 것을 말한다.
  • 단, 각 메소드는 서로 다른 인자(타입이 다른 것도 포함)를 가져야 한다.

아래의 예시는 생활코딩에서 가져온 것이다.

package org.opentutorials.javatutorials.polymorphism;
class O{
    public void a(int param){
        System.out.println("숫자출력");
        System.out.println(param);
    }
    public void a(String param){
        System.out.println("문자출력");
        System.out.println(param);
    }
}
public class PolymorphismOverloadingDemo {
    public static void main(String[] args) {
        O o = new O();
        o.a(1);;
        o.a("one");
    }
}


참고한 글

profile
쿄쿄

0개의 댓글