지노랩 /JinoLab
[SystemVerilog] 4.5객체 지향 프로그래밍(OOP) 용어 정리 본문
[SystemVerilog] 4.5객체 지향 프로그래밍(OOP) 용어 정리
지노랩/JinoLab 2025. 2. 25. 11:074.5 OOP Terminology (객체 지향 프로그래밍 용어 정리)
SystemVerilog에서 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은
효율적인 테스트벤치(Testbench) 설계를 가능하게 하는 중요한 개념이다.
초보자와 전문가의 차이는 OOP 개념과 용어를 얼마나 잘 이해하고 활용하는지에서 비롯된다.
이 글에서는 Verilog 및 SystemVerilog에서 사용하는 주요 OOP 개념과 그에 대한 설명을 제공한다.
1. SystemVerilog에서 사용되는 주요 OOP 개념
① 클래스(Class)
- 클래스는 객체를 생성하는 기본적인 설계 단위이다.
- 내부에 변수(데이터)와 함수(루틴)를 포함한다.
- Verilog에서 모듈(Module)과 유사한 개념이다.
② 객체(Object)
- 클래스의 인스턴스(Instance, 실체화된 개체)
- Verilog에서 모듈을 인스턴스화하여 사용하는 것과 유사하다.
- 즉, 클래스를 정의한 후, 이를 기반으로 실제 사용 가능한 객체를 생성해야 한다.
③ 핸들(Handle)
- 객체에 대한 포인터(Pointer) 또는 참조(Reference)
- Verilog에서는 모듈 인스턴스의 이름을 사용하여 신호나 메서드에 접근하지만,
OOP에서는 핸들을 이용해 객체를 동적으로 관리할 수 있다. - 객체의 메모리 주소를 저장하는 역할을 하며, 한 번에 한 개의 타입만 가리킬 수 있다.
④ 속성(Property)
- 클래스 내에 포함된 변수(Variable)로, 데이터를 저장하는 역할을 한다.
- Verilog에서는 **레지스터(Register)나 와이어(Wire)와 같은 신호(Signal)**가 속성과 유사하다.
⑤ 메서드(Method)
- 객체 내에서 데이터를 조작하는 프로시저(Procedure) 코드
- Verilog에서는 **태스크(Task)와 함수(Function)**가 동일한 역할을 수행한다.
- SystemVerilog 클래스 내부에서는 태스크와 함수를 **메서드(Method)**라고 부른다.
⑥ 프로토타입(Prototype)
- 루틴의 **이름(Name), 타입(Type), 인자 리스트(Argument List)**를 정의하는 선언부(Declaration).
- 루틴의 본문(Body)에는 실행할 코드가 포함된다.
- Verilog에서는 태스크와 함수의 선언부에 해당한다.
2. SystemVerilog vs Verilog의 용어 차이
이 책에서는 Verilog에서 사용하던 기존의 용어를 유지하는 방식을 따르고 있다.
즉, Verilog에서 사용하던 **"변수(Variable)"와 "루틴(Routine)"**이라는 용어를 그대로 사용하며,
OOP에서 일반적으로 쓰이는 **"속성(Property)"와 "메서드(Method)"**라는 용어는 사용하지 않는다.
만약 OOP 개념이 익숙하다면, 이 장을 간략하게 훑어봐도 된다.
3. OOP 개념을 쉽게 이해하는 비유: 집과 설계도
객체 지향 프로그래밍 개념을 쉽게 이해하기 위해, 집과 설계도(blueprint)의 관계를 예로 들 수 있다.
- 클래스(Class) = 집의 설계도(BluePrint)
- 설계도는 집의 구조를 설명하지만, 실제로 사람이 거주할 수 있는 형태가 아니다.
- 하나의 설계도로 여러 개의 집(객체)을 지을 수 있다.
- 객체(Object) = 실제 집(House)
- 설계도를 바탕으로 실제 존재하는 개체(Instance)가 만들어진다.
- 같은 설계도를 사용하더라도, 서로 다른 위치에 여러 개의 집이 존재할 수 있다.
- 핸들(Handle) = 집 주소(Address)
- 핸들은 객체를 참조하는 역할을 한다.
- 주소(Address)를 통해 특정 집을 가리키듯이, 핸들은 특정 객체를 가리킨다.
- 속성(Property) = 집 내부의 상태
- 집 안에 있는 조명(On/Off), 가구의 위치, 온도 등의 상태 정보
- 클래스의 변수(데이터 멤버)와 동일한 개념이다.
- 메서드(Method) = 집 안에서 수행할 수 있는 동작
- 조명을 켜거나(turn_on_light()), 난방을 조절하는(set_temperature()) 기능
- 클래스의 함수(메서드)와 동일한 개념이다.
class House;
bit porch_light; // 속성: 현관등 상태 (0=OFF, 1=ON)
function void turn_on_porch_light();
porch_light = 1; // 메서드: 현관등을 켜는 기능
endfunction
endclass
위의 House 클래스에서, turn_on_porch_light() 메서드를 호출하면 현관등을 켜는 동작이 수행된다.
4. SystemVerilog에서 OOP를 활용하는 방법
Verilog에서 복잡한 설계를 만들 때는 모듈(Module)을 계층적으로 구성한다.
SystemVerilog에서는 이를 객체(Object) 기반으로 설계하여 계층적인 구조를 유지할 수 있다.
- Verilog 방식:
- 모듈(Module)을 계층적으로 설계
- 모듈 인스턴스화(Instantiation) 사용
- 태스크(Task)와 함수(Function) 활용
- SystemVerilog OOP 방식:
- 클래스(Class) 기반 설계
- 객체(Object)를 동적으로 생성 및 관리
- 속성(Property)과 메서드(Method)를 활용하여 모듈화
이처럼 SystemVerilog에서 객체 지향 개념을 활용하면 코드의 유지보수성과 확장성을 향상시킬 수 있다.
결론
SystemVerilog에서 객체 지향 프로그래밍(OOP)은 테스트벤치 및 설계 구조를 더욱 체계적으로 조직하는 데 중요한 역할을 한다.
이를 이해하고 활용하면 보다 강력하고 유연한 테스트 환경을 구축할 수 있다.
- 클래스(Class): 객체를 정의하는 기본 단위
- 객체(Object): 클래스의 인스턴스
- 핸들(Handle): 객체를 가리키는 포인터
- 속성(Property): 객체의 데이터
- 메서드(Method): 객체의 동작을 정의하는 함수
- 프로토타입(Prototype): 함수의 선언부
이러한 개념을 잘 이해하고 적용하면, SystemVerilog 기반의 검증 환경을 더욱 효과적으로 구축할 수 있다.
Chris Spear 저자님의
SystemVerilog For Verification
A Guide to Learning the Testbench Language Features
내용을 기본으로 작성되었습니다.
'SystemVerilog검증 > 4. 객체지향 OOP 기초' 카테고리의 다른 글
[SystemVerilog] 4.7 객체 할당 해제(Object Deallocation) 방법 (0) | 2025.02.25 |
---|---|
[SystemVerilog] 4.6 객체 생성하기 (Creating New Objects in SystemVerilog) (0) | 2025.02.25 |
[SystemVerilog] 4.4 클래스 정의 위치: 프로그램, 모듈, 패키지 활용법 (0) | 2025.02.25 |
[SystemVerilog] 4.3 첫 번째 클래스 만들기 (Your First Class in SystemVerilog) (0) | 2025.02.25 |
[SystemVerilog] 4.2 동사가 아닌 명사로 사고하라 (Think of Nouns, not Verbs) (0) | 2025.02.25 |