바이트코드 패턴 (Bytecode Pattern)
203 : 명령어 집합은 실행할 수 있는 저수준 작업들을 정의한다. 명령어는 일련의 바이트로 인코딩된다. 가상 머신은 중간 값들을 스택에 저장해가면서 이들 명령어를 하나씩 실행한다. 명령어를 조합함으로써 복잡한 고수준 행동을 정의할 수 있다.
바이트코드의 사용
- 언어가 너무 저수준이라 만드는 데 손이 많이 가거나 오류가 생기기 쉽다.
- 컴파일 시간이나 다른 빌드 환경 때문에 반복 개발하기가 너무 오래 걸린다.
- 보안에 취약하다. 정의하려는 행동이 게임을 깨먹지 않게 하고 싶다면 나머지 코드로부터 격리해야 한다.
디자인 결정
- 스택 기반 VM
- 명령어가 짧다.
- 코드 생성이 간단하다.
- 명령어 개수가 많다. - 레지스터 기반 VM
- 명령어가 길다.
- 명령어 개수는 줄어든다.
만들어야 하는 명령어
- 외부 원시명령
- VM 외부 게임코드에 접근. 유저가 볼 수 있는 일들을 처리한다. - 내부 원시명령
- 리터럴, 연산, 비교, 그 외 스택에 값을 주고받는 명령어들로 VM 내부 값을 다룬다. - 흐름 제어
- 명령어를 조건에 따라 실행하거나 반복 실행하기 위해 사용한다. 바이트코드 같은 저수준 언어에서는 jump를 활용한다. - 추상화
- 재사용성을 높이기 위해 프로시저 같은 것을 만든다. VM이 별도의 반환 스택을 관리하며 jump를 활용한다.
데이터의 표현
- 단일 자료형
- 간단하다.
- 다른 자료형을 다룰 수 없다. - 태그 붙은 변수
- 값이 자신의 자료형을 안다.
- 메모리가 조금 더 필요하다. - 태그가 붙지 않은 공용체
- 작고 빠르다.
- 안전하지 않다. - 인터페이스
- 제한이 없다.
- 객체지향적이다.
- 번거롭다.
- 비효율적이다.
바이트코드는 어떻게 만들 것인가?
- 텍스트 기반 언어를 정의할 경우
- 문법을 정의해야 한다.
- 파서를 구현해야 한다.
- 문법 오류를 처리해야 한다.
- 비-프로그래머들은 쓰기 어려울 것이다.
- UI가 있는 저작 툴을 만들 경우
- UI를 구현해야 한다.
- 오류가 적다.
- 이식성이 낮다.
'Computer Science > Design Pattern' 카테고리의 다른 글
| [게임 프로그래밍 패턴] 12. 타입 객체 패턴 (2) | 2023.12.05 |
|---|---|
| [게임 프로그래밍 패턴] 11. 하위 클래스 샌드박스 패턴 (2) | 2023.12.05 |
| [게임 프로그래밍 패턴] 9. 업데이트 메서드 패턴 (0) | 2023.11.25 |
| [게임 프로그래밍 패턴] 7. 이중 버퍼 패턴 (0) | 2023.11.19 |
| [게임 프로그래밍 패턴] 6. 상태 패턴 (0) | 2023.11.13 |