본문 바로가기

Programming/SystemVerilog

시스템베릴로그의 Virtual Classes와 Polymorphism

virtual class

다른 클래스들의 parent로서밖에 존재하지 못하는 클래스

virtual class instance는 constructor를 통해 인스턴스화 될 수 없지만, 다른 클래스 객체를 가리키는 handle로서 존재할 수 있다.

virtual class라고 정의되며, 실제 인스턴스화 될 수 없으므로 abstract 클래스라고도 부른다.

virtual class에 function을 define할 수는 있으나, 실제로 이 함수를 implement하는 주체는 virtual class를 extend한 child class이다.

 

Polymorphism

polymorphism이란 한국어로 번역하면 다형성인데, 기본적인 정의는 구글링하면 많이 나오니까 시스템베릴로그에서 갖는 의미에 좀더 집중하여 서술해보겠음!

polymorphism이란, 모든 클래스의 공통적인 특징(variable, method)을 갖는

systemverilog에서 polymorphism의 핵심은..

부모클래스가 어떤 childclass(혹은 subclass)든 point 가능하다는 것이다.

여기서 point 하다? 참조하다. 혹은 assign되다.

이를 down-casting 이라고 함. 부모 클래스의 강력한 기능이며, 별도의 system 함수를 필요로하지 않는 기본 기능이다.

 

영어로 된 시스템 베릴로그 관련 웹 문서를 보다보면 위 내용에 관한 여러 표현을 볼 수 있는데..

 

모든 child classes 객체는 부모 클래스 (parent class) 핸들 안에 저장될 수 있다.

= Any subclass instyance can be stored in a parent class handle

부모 클래스는 모든 child class를 point 가능하다.

= parent class handle can point to child class instance

부모 클래스에 모든 child class 객체를 assign 할 수 있다.

= A class handle of a given type can be assigned any inherited class instance.

위 세 말은 전부 같은 뜻임!

 

 

 

다음 게시글에서 down-casting과 up-casting을 다룬다.