OOPS의 다형성: 다형성이란 [상세 설명]

게시 됨: 2020-11-24

OOP의 다형성은 분리할 수 없으며 모든 객체 지향 프로그래밍 언어의 필수 개념입니다. 개체 또는 참조는 기본적으로 다른 인스턴스에서 여러 형식을 취할 수 있습니다. 단어에서 알 수 있듯이 '폴리'는 '많은'을 의미하고 '모프'는 '형태'를 가리킵니다. 따라서 다형성은 전체적으로 '여러 형태를 갖는 속성'을 의미합니다.

객체 지향 프로그래밍 언어는 단일 인터페이스로 클래스와 객체를 처리합니다. 함수 오버로딩, 재정의 및 가상 함수의 개념을 구현합니다. 또한 일반적으로 프로그래밍에서 상속을 계측하는 데 사용됩니다.

읽기: 다형성 대 상속

목차

OOP에서 다형성의 예

다형성은 호출하는 개체의 클래스에 따라 다른 작업을 수행하는 개체 지향 프로그래밍 언어의 메서드입니다. 다형성을 사용하면 여러 클래스 개체에 메시지가 전송되고 모든 개체는 클래스 속성에 따라 적절하게 응답합니다.

다음은 다형성을 명확하게 설명하는 코드입니다.

경고를 사용하십시오.
# 패키지 클래스 생성
패키지 A;
# 생성자 생성
서브 뉴
{
# shift는 패키지 이름을 사용합니다.
# 'class' 변수에 할당
내 $class = 시프트;
내 $self = {
'이름' => 시프트,
'roll_no' => 시프트
};
하위 메서드
{
print("이것은 클래스 A에 속합니다. ");
}
};
패키지 B;
# @ISA 배열은 목록을 포함합니다
해당 클래스의 상위 클래스(있는 경우)
내 @ISA = (A);

하위 메서드
{
print("이것은 클래스 B에 속합니다.");
}
패키지 메인;
B->메서드();
A->메서드();

산출:

이것은 클래스 B에 속합니다.

이것은 클래스 A에 속합니다.

Swiggy, Quora, IMDB 등과 같은 애플리케이션을 빌드하는 방법을 배우십시오.

설명

첫 번째 출력의 경우 클래스 B에 정의된 method()가 클래스 A에서 상속된 정의를 재정의하고 두 번째 출력의 경우 그 반대의 경우도 마찬가지입니다. 이 속성은 전체 클래스의 전체 정의를 다시 작성하지 않고 기존 패키지의 기능을 확장하는 데 유용합니다. 따라서 프로그래머의 작업을 쉽게 만들고 널리 사용하는 이유.

Oops의 다형성 유형

객체 지향 프로그래밍(OOPS) 언어에는 다음과 같은 두 가지 유형의 다형성이 있습니다.

  1. 정적 바인딩(또는 컴파일 시간) 다형성(예: 메서드 오버로딩)
  2. 동적 바인딩(또는 런타임) 다형성(예: 메서드 재정의)

원천

1. 컴파일 시간 또는 정적 다형성

메서드 오버로딩을 사용하면 프로그래머가 다양한 메서드를 구현할 수 있도록 하는 객체 지향 프로그래밍 언어에서 정적 다형성이 달성됩니다. 사용하는 이름은 같을 수 있지만 매개변수는 다릅니다. 특정 조건은 아래와 같이 정적 다형성에 도움이 됩니다.

  • 모든 매개변수의 유형은 달라야 합니다.
  • 매개변수의 순서는 다를 수 있습니다.
  • 한 방법의 매개변수 수는 다른 방법과 달라야 합니다.

정적 바인딩 다형성 에서 일치하는 유형과 인수의 수는 오버로드된 함수를 호출합니다.

  • 이 모든 정보는 컴파일 시간 동안 사용할 수 있으므로 컴파일러는 적절한 함수를 선택합니다.
  • 함수 오버로딩이 이를 수행하며 연산자 오버로딩은 정적 바인딩 또는 초기 바인딩이라고도 합니다.

프로그램

클래스 A // 기본 클래스

{

정수 _

공개 :

무효 표시()

{

cout<< "클래스 A " ;

}

};

클래스 B: public A // 파생 클래스

{

정수 b;

공개 :

무효 표시()

{

cout<< "클래스 B" ;

}

};

위의 프로그램에서 display() 함수 프로토타입은 기본 클래스와 파생 클래스 모두에서 동일합니다. 따라서 여기에 정적 바인딩을 적용할 수 없습니다. 이 프로그램은 적절한 기능 선택과 함께 런타임에 가장 잘 실행됩니다.

  • 런타임 동안 언어의 컴파일러는 해당 메서드의 서명을 식별하여 다양한 메서드를 식별합니다.
  • 컴파일러는 먼저 메서드 서명을 식별하고 프로그램 컴파일 중에 특정 메서드 호출에 대한 메서드를 결정합니다.
  • 컴파일 시간 다형성에 대한 실행은 훨씬 빠르지만 프로세스가 그렇게 유연하지 않습니다.

읽어보기: OOPS 인터뷰 질문

런타임 또는 동적 다형성

동적 다형성에서 재정의된 단일 메서드에 대한 호출은 프로그램 런타임 중에 해결됩니다. 메서드 재정의는 런타임 다형성의 두드러진 예 중 하나입니다. 이 과정에서 재정의는 포인터와 가상 함수를 통해 수행됩니다.

  • 메서드 재정의에서 단일 메서드는 부모 클래스에 있는 하위 클래스에서 선언됩니다. 자식 클래스는 구현 방법을 얻습니다.
  • 런타임 다형성 동안 클래스는 다른 상속된 메서드에 자체 사양을 제공합니다. 메서드 간의 이러한 전송은 부모 클래스 개체 코드를 수정하지 않고도 이루어집니다.

프로그램

#include <iostream>

네임스페이스 std 사용

class Animal { // 기본 클래스

공개 :

문자열 색상 = "갈색" ;

};

class Dog: public Animal // Animal 클래스를 상속합니다.

{

공개 :

문자열 색상 = "녹색" ;

};

정수 메인( 무효 ) {

동물 d= 개();

cout<<d.color;

}

산출:

갈색

  • 런타임 다형성 에서 개체의 메서드는 컴파일 시간 대신 런타임에 호출됩니다.
  • 동적 바인딩 또는 후기 바인딩이라고도 하는 메서드 재정의를 통해 가능합니다.
  • 동적 다형성의 프로세스는 컴파일 시간 다형성보다 비교적 느리지만 유연합니다.

차이점 B/W 컴파일 타임과 런타임 다형성

컴파일 타임 다형성 런타임 다형성
함수 호출 함수는 컴파일 시간에 호출됩니다. 함수는 런타임에 호출됩니다.
공통 용어 이를 오버로딩, 초기 바인딩 및 정적 바인딩이라고 합니다. 재정의, 후기 바인딩 및 동적 바인딩으로 알려져 있습니다.
메소드 이름 및 매개변수 오버로딩에서 둘 이상의 메소드는 이름은 같지만 매개변수의 수 또는 유형이 다릅니다. 재정의에서 둘 이상의 메서드에 동일한 이름, 번호 및 매개변수 유형이 있습니다.
캐리어 이는 함수 및 연산자 오버로딩으로 달성됩니다. 이것은 가상 함수와 포인터로 달성됩니다.
실행 시간 컴파일 타임에 런타임 다형성보다 빠르게 실행됩니다. 런타임에 컴파일 타임 다형성보다 느리게 실행됩니다.
유연성 모든 것이 컴파일 시간에 실행되기 때문에 유연성이 떨어집니다. 모든 것이 런타임에 실행되기 때문에 더 유연합니다.

마지막 단어

다형성은 프로그래밍하는 동안 여러 이점을 제공하므로 OOP의 개념을 반드시 배워야 합니다. 다형성을 통해 사용자는 테스트된 클래스와 코드를 리모델링할 수 있습니다. 자체적으로 프로그래밍을 확장하는 데 유용합니다. 또한 사용자가 double, Float, Int 또는 Long과 같은 여러 유형 변수를 단일 변수에 저장할 수 있어 검색 및 구현이 더 간단합니다.

OOP, 전체 스택 소프트웨어 개발에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 500시간 이상의 엄격한 교육, 9개 이상의 프로젝트를 제공하는 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 PG 디플로마를 확인하십시오. 및 과제, IIIT-B 동문 자격, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

풀 스택 개발자 되기

소프트웨어 개발에서 업그레이드 및 IIIT-BANGALORE의 PG 디플로마
더 알아보기