2024 Final
※ O/X 문제(각0.5점x40=20 O/X로 표기)
1. 일반적인 게임 엔진은 하드 코딩된 로직(hard-coded logic) 또는 게임 규칙(game rules)이 포함되어 있으며, 특정 유형의 게임 개체를 렌더링하기 위한 특수 코드를 사용한다. ······( )
2. 일반적인 격투 게임(fighting games)은 복잡한 버튼 및 조이스틱의 조합에 대한 사용자 입력 처리가 필요하다.·············································································· ( )
3. 메모리 단편화(memory fragmentation)의 문제점과 고속의 메모리 할당/해제를 보장하기 위하여 대부분의 게임 엔진은 기계어(machine language)로 코딩한다.···········( )
4. 저수준 렌더러(low-level renderer)는 대부분 게임 엔진에서 그래픽 라이브러리를 사용하지 않고 처리하며, 카메라가 볼 수 없는 물체는 제거하여 처리한다. ··········· ( )
5. 디바이스 드라이버(device driver)는 사용자 처리를 위한 고수준 소프트웨어 요소(high-level software component)이다. ················································ ( )
6. 게임 엔진에서, 자료 구조(data structure)와 알고리즘(algorithm)을 위한 3rd parity 라이브러리(library) 등을 사용하지만, 메모리 효율 및 빠른 처리를 위하여 직접 작성한 코드도 사용한다.···········( )
7. Havok과 PhysX는 게임 개발에 사용되는 대표적인 3rd parity 충돌 및 물리 엔진(physic and collision engine)이다.········································································ ( )
8. OpenGL은 Windows에서만 사용 가능한 그래픽스(graphics) 라이브러리이다.···········( )
9. C++에서 Mac에서 처리되는 코드를 판단하기 위해서는 __APPLE__이 정의되었는지 판단하면 된다. ···········( )
10. 어셈블리 언어(assembly language)는 고수준 언어(high-level language)이다.···········( )
11. Git은 대표적인 version control system이다.····· ( )
12. C++에서 전처리기(preprocessor)는 소스 코드(source code)를 컴파일(compilation)하기 전에 동작하며, 목적 코드(object code)를 생성한다.····································· ( )
13. IDE (integrated development environment)는 editor, compiler, linker, debugger 등을 모두 포함한 개발 도구를 의미한다.··············································· ( )
14. Visual Studio에서 solution의 개념은 한 개의 응용 프로그램을 의미한다. ···········( )
15. 64-bit Windows의 환경에서, Visual Studio로 응용 프로그램을 개발할 때, x86으로 build된 프로그램은 64-bit 메모리 주소를 가진다.···················································· ( )
16. C++에서 포인터(pointer)에 저장된 주소는 항상 유효하여 접근이 가능하다.···········( )
17. C++에서 shared_ptr은 여러 포인터가 동시에 동적 할당된 객체를 접근할 수 있는 wrapper 클래스이다.·································································· ( )
18. 2의 보수(two’s complement)로 8-bit 부호가 있는 정수(signed integer)를 표현하면, [-127, 127] 범위로 지정된다.···················································· ( )
19. 동일한 비트를 부동 소수점(floating point)으로 방식으로 표현하면, 고정 소수점(fixed point) 방식보다 표현되는 경우의 수가 증가한다.················································ ( )
20. 동적 메모리 할당(dynamic memory allocation)으로 생성되는 메모리 영역을 stack이라고 한다.···········( )
21. 한 개의 프로그램은 단일 thread로 구성된다.············ ( )
22. CPU 내부에 존재하는 저장 장치를 register라고 한다. ···········( )
23. DRAM (dynamic RAM)은 전원만 공급되면 저장된 자료는 항상 유지된다.···········( )
24. 기계어 명령어(machine language instruction)는 수행할 동작을 표현하는 opcode로 불리는 영역이 필요하다.···································································· ( )
25. 64-bit는 약 16 T Byte의 메모리 주소를 표현할 수 있다.··········· ( )
26. Integrated graphics card는 대부분 전용의 리소스(resource) 공간을 가진다. ···········( )
27. 게임 엔진 요소들을 brute-force 방식으로 start-up과 shut-down 처리를 수행하는 것은 코드 수행의 처리가 복잡하게 되어 디버깅과 유지 관리가 어렵다.····· ( )
28. C++에서 new와 malloc()은 빠르게 처리되므로 대부분의 게임 엔진에서는 전용의 메모리 allocator를 사용하지 않는다.········································ ( )
29. C++의 표준 템플릿 라이브러리(STL)는 모든 컴파일러에 동일한 처리 시간을 보장한다.···········( )
30. 모든 자료 구조의 컨테이너(container: dynamic array, list, …)는 insert, remove, find 등의 처리에 동일한 처리 시간을 보장한다.······································· ( )
31. C++에서 wchar_t는 Linux에서 2-byte이다.··· ( )
32. C++에서 std::wstring은 wchar_t로 문자를 저장하는 Unicode 문자열이다.···········( )
33. GUID는 globally unique identifier로 128-bit 텍스트 문자열(text string)이다.···········( )
34. EUC-KR과 CP949는 Unicode로 한국어, 영어, 기호 등을 저장하는 방식이다.···········( )
35. UTF-8은 모든 문자를 8-bit로 표현한다.············· ( )
36. C(C++)의 표준 파일 입출력은 비동기 파일 입출력(asynchronous file I/O)이다.···········( )
37. 게임 엔진의 모든 요소들(physics, rendering, AI, …)은 모두 동기화되어 갱신되어야 한다.···········( )
38. 프레임 버퍼(frame buffer)가 완전히 그려지지 않은 상태에서 버퍼가 갱신되면 screen tearing이 발생할 수 있다.················································ ( )
39. 3GHz 프로세서에서 64-bit clock count register를 사용하면, 약 1년 정도의 시간을 연속적으로 저장할 수 있다.······················································· ( )
40. 게임 엔진에서 선, 점, 도형, 텍스트 등을 출력하는 drawing API를 디버깅(debugging)용으로 사용할 수 없다.························································ ( )
※ 단답형(각1점x20=20)
41. 2D/3D 비디오 게임은 실시간 처리를 명확히 지키지 않아도 되는 A real-time agent-based computer simulations이다(영어로 작성). ··························· (A: )
42. 물리 엔진(physics engine)에서 신체를 여러 강체 요소(rigid bodies)의 묶음으로 표현하여, 시체나 쓰러짐 등을 다양한 모습으로 표현하는 효과를 B라고 한다(영어로 작성).···········(B: )
43. 고수준 언어(high-level language)에서 소스 코드(source code)를 한 줄마다(line-by-line) 실행하는 번역기를 C라고 한다.············(C: )
44. 실행 시간에 포함되는 오브젝트 코드(object code)를 Windows에서는 D라고 한다.············· (D: )
45. 메모리를 실행시간에 할당하고 해제하지 않은 경우에 발생하는 문제를 E라고 한다. ············· (E: )
46. 단일 인스턴스(instance)만으로 수행되는 디자인 패턴을 F라고 한다(영어로 작성). ············· (F: )
47. 데이터의 묶음(container)에 대한 요소(element)를 점진적으로 접근할 수 있는 객체를 G라고 한다(영어로 작성).·························· (G: )
48. 두 개 이상의 thread가 공유된 리소스(shared resource)를 동시에 접근하여 원하는 처리 결과를 얻지 못하는 상황을 H라고 한다(영어로 작성). ···········(H: )
49. H의 상황이 발생하지 않도록 동시성(concurrency)을 제어하는 것을 I라고 한다(영어로 작성). ············· (I: )
50. CPU 내부에 있는 산술/논리 연산 장치를 J라고 한다(영어로 작성). ············· (J: )
51. 명령어(instruction)가 저장된 메모리의 위치를 저장하는 register를 PC (program counter) 또는 K라고 한다. (K: )
52. CPU와 RAM 사이에 위치하는 빠른 속도의 buffer 메모리를 L이라고 한다(영어로 작성).············· (L: )
53. Flynn’s taxonomy에서, 단일 명령어로 여러 데이터 처리를 수행하는 병렬 컴퓨터 구조(parallel computer architecture)를 M라고 한다(영어로 작성). ·····(M: )
54. M을 수행하는 wide ALU 장치를 N라고 한다(영어로 작성) ···········(N: )
55. O는 프로그램이 주 메모리(main memory)에 저장되어 있지 않은 메모리 블록에 액세스하려고 할 때 발생하는 이벤트이다(영어로 작성). ···········(O: )
56. 컴퓨터의 명령어(instruction)의 처리는 (fetch)-(P)-(execute)-(memory access)-(register write-back)의 단계(stage)로 수행된다(영어로 작성).···········(P: )
57. 이전의 명령어 처리 단계가 모두 완료될 때까지 대기하지 않고, 새로운 클럭 사이클에서 새 명령어의 fetch 단계를 이어서 진행하는 묵시적인 병렬 처리(implicit parallelism)를 Q라고 한다(영어로 작성).············· (Q: )
58. 게임 엔진 프로그래밍에서 많이 사용되며, 작은 블록으로 메모리를 할당하는 방식을 R allocator라고 한다.············· (R: )
59. 게임 엔진의 리소스 관리자(resource manager)는 리소스를 엔진에서 사용할 형태로 통합하기 위한 offline 툴과 S의 두 요소를 가진다.···········(S: )
60. 게임 루프(game loop)는 T-구동 프레임워크(T-driven framework)로 동작할 수 있으며 T 함수는 다른 함수에 인수로 전달되고, 다른 작업이 수행되고 나중에 실행되는 함수이다(영어로 작성). ············· (T: )
※ 서술형(각4점x5=20)
61. C++에서 전처리기(preprocessor)를 사용하여 다중 컴파일이 되지 않도록 하는 방법에 대해 설명하라(#pragma once는 제외).
62. C++에서 가상 함수(virtual function)를 사용한 다형성(polymorphism)에 대해서 설명하라.
63. IEEE 754 표준(floating-point arithmetic)으로 십진수 -0.1875를 32비트 single precision으로 표현하라(16진수로 표시, 0.1875 = 0.125+0.0625 = 1/8 + 1/16).
64. Semaphore에 대해서 설명하라(간략하게 핵심만).
65. 게임 개발에 유용한 cheat 기능의 예를 4개 이상 설명하라(간략히 설명).