[C++] 다형성(Polymorphism)

Date:     Updated:

카테고리:

태그:

이 글은 C++ 다형성(Polymorphism) 공부하고 정리한 글입니다

다형성

  • 부모 클래스에 공통된 함수를 선언하고 자식 클래스에서 재정의해 사용하는 것
  • 쉽게 말하면 “같은 지시, 다른 동작” 입니다

바인딩

  • 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위
  • 예를 들어 함수를 호출하는 부분에서 실제 함수가 위치한 메모리를 연결하는 것도 바로 바인딩

    정적 바인딩

    • 컴파일 시에 할당한다
    • 무늬(변수의 클래스) 따라 가겠다라고 생각해라
      • 만약 Animal을 상속받는 Cat이 있을 때
      • 이 경우에는 Cat 클래스에 있는 함수 Speak()가 호출되고
        Cat* myCat = new Cat();
        myCat->Speak();
        
      • 이 경우에는 Animal 클래스에 있는 함수 Speak()가 호출된다
        Animal* yourCat = new Cat();
        yourCat->Speak();
        

    동적 바인딩

    • 프로그램 실행 중에 가상 함수 테이블이 만들어진다
    • 클래스가 가상 함수를 포함하면 그 클래스는 동적 바인딩을 한다

      가상함수

      virtual void Animal::Speak()
      {
          ...
      }
      
      • 함수 앞에 virtual 키워드 붙어있는 함수
      • 자식의 클래스의 멤버함수가 언제나 호출됨
        • 부모의 포인터 또는 참조를 사용 중이더라도
      • 동적(dynamic) 바인딩 / 늦은(late) 바인딩
        • 실행 중에 어떤 함수를 호출할지 결정한다
        • 가상 함수를 찾아 갈 때 가상 함수 테이블을 거쳐 가기 때문에 정적 바인딩보다 느림
      • 이를 위해 가상 함수 테이블이 생성됨
        • 모든 가상 멤버함수의 주소를 포함

      가상 함수 테이블

      • 컴파일러가 한개 이상의 가상 함수를 포함하는 클래스에 대해 가상함수 테이블을 생성
      • 가상 함수 포인터를 모아둔 배열
      • 가상 함수가 호출 될 때 해당 함수의 포인터를 가져와 사용한다


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기