[TIL] 73일차 - 기술 면접 문답 목록2

김유원·2024년 4월 8일
1

📝 24.04.08

37. Object pool을 사용하는 이유는 무엇인가요?

오브젝트 풀은 성능 향상을 위해 사용합니다. 게임에서 오브젝트를 생성하고 삭제하는 작업은 메모리 사용량이 높아 성능 저하의 원인이 되기 때문에 미리 생성된 객체를 재사용함으로써 성능 향상을 도모할 수 있습니다.

38. 객체를 이동할 때 벡터를 정규화(Nomarlized) 하는 이유에 대해 설명해주세요.

객체 이동 시 벡터를 정규화하는 가장 큰 이유는 일관성 있는 이동 속도를 갖게하기 위해서입니다. 벡터를 정규화하면 이동 벡터의 크기를 모두 동일하게 1로 통일해주므로 이동에 사용되는 속도를 일정하게 유지할 수 있습니다.

39. 월드 스페이스(World Space)와 로컬 스페이스(Local Space)의 차이에 대해 설명해주세요.

월드 스페이스는 전역 좌표 공간으로 씬 전체를 기준으로 게임 오브젝트의 위치와 회전을 나타냅니다. 로컬 스페이스는 부모 게임 오브젝트를 기준으로한 상대적인 좌표 공간으로, 부모 오브젝트가 이동하면 자식 오브젝트의 좌표가 바뀌지 않아도 부모 오브젝트를 따라 이동합니다.

40. 컬링 종류와 사용하는 이유에 대해 설명해주세요.

컬링이란 화면에 표시할 필요가 없는 오브젝트들을 추려내는 작업입니다. 게임 엔진에서 가장 자주 사용하는 컬링은 프러스텀 컬링입니다. 카메라 시야에 보이는 오브젝트만 그리고 그외의 오브젝트는 제거하는 방법으로 필요한 작업량을 대폭 줄일 수 있어 사용됩니다. 또다른 컬링 종류로는 오클루전 컬링이 있습니다. 오클루전 컬링은 다른 오브젝트에 의해 숨겨진 오브젝트를 걸러내어 렌더링 프로세스에서 제거하는 방법으로 성능을 향상합니다.

41. 유니티 최적화 기법은 어떤 것들이 있나요?

유니티 최적화 기법으로는 메모리 최적화를 위한 오브젝트 풀링, 가비지 컬렉션 혹은 그래픽 최적화를 위한 배칭, 오브젝트 컬링, 그리고 가장 기본적인 스크립트 최적화 등 다양한 기법이 있습니다.

꼬리 질문 a. 최적화를 해본 적이 있나요? 없다면 어떤 최적화가 있는지 설명해주세요.

메모리 최적화를 위해 오브젝트 풀링 기법을 자주 사용하였습니다. 스킬 오브젝트 호출을 오브젝트 풀링 기법으로 사용하여 필요 이상의 오브젝트 생성과 소멸로 인한 메모리 낭비를 최소화했습니다.

꼬리 질문 b. 최적화에서 가장 중요한 부분은 무엇인가요?

최적화의 핵심은 문제 식별이라고 생각합니다. 어느 부분에서 성능 문제가 발생하는지 식별해야 최적화 작업을 시작할 수 있기 때문입니다. 가장 많은 시간이 소요되는 코드 영역을 중점적으로 파악하여 해결할 줄 알아야 합니다.

꼬리 질문 c. 최적화를 위해서 적용해본 텍스쳐 포맷이 있나요?

최적화를 위해 적용해본 텍스쳐 포맷은 없습니다. 하지만 최근 가장 자주 사용되는 텍스쳐 포맷은 ASTC으로, 다양한 해상도와 압축률을 지원하는 모바일 지원 고급 텍스쳐 압축 포맷이라는 것은 압니다.

42. 가비지컬렉터(GC)란 무엇인가요?

가비지 컬렉터는 자동 메모리 관리 시스템입니다. 힙 메모리 영역에서 더 이상 사용되지 않는 메모리를 식별하고 자동으로 회수하여 프로그램 기능을 향상합니다.

43. 어떤 에셋을 사용해 보셨나요? 없다면 알고 있는 에셋이 있나요?

다양한 에셋을 사용했습니다. 지금 기억나는 에셋은 SPUM 이라는 2D 캐릭터 에셋인데, 피부색, 눈, 머리, 옷, 무기 등 거의 모든 부분을 커스텀한 2D 픽셀 캐릭터를 생성할 수 있게 하는 에셋입니다.

44. ScriptableObject이란 무엇이며 어떻게 사용되나요?

추후 서술

꼬리 질문 a. ScriptableObject의 특징에 대해 설명해주세요.

45. Unity에서 레이어와 태그의 역할은 무엇이며, 어떻게 사용되는지 설명해주세요.

유니티에서 레이어와 태그는 게임 오브젝트를 식별하고 분류하는 데 사용하는 기능입니다. 그 중 레이어는 게임 오브젝트를 서로 다른 그룹으로 분류하는 데 사용됩니다. 예를 들어, 레이어를 분리하여 적, 플레이어, 맵 등의 오브젝트 종류를 구분하고 서로 다른 레이어끼리의 충돌 감지 여부를 구분할 수 있습니다. 태그는 특정 유형의 게임 오브젝트를 식별하고 관리하는 데 사용됩니다. 예를 들어 아이템 태그를 가진 오브젝트와 충돌했을 때만 해당 아이템을 줍게할 수 있게 하는 등 특정 태그와의 충돌에만 특정 행동을 취하도록 스크립트를 작성할 수 있습니다.

46. Find 함수 사용을 자제해야 하는 이유에 대해 설명해주세요.

Find 함수는 성능에 부정적인 영향을 미칠 수 있기 때문입니다. Find 함수는 씬 내의 모든 게임 오브젝트를 검색하여 이름이 일치하는 것을 찾는 함수 이므로, 씬에 많은 수의 게임 오브젝트가 있는 경우 검색량이 많아 매우 큰 성능 저하가 일어날 수 있습니다.

47. Scene Load의 종류를 비교해서 설명해주세요.

SceneManager.LoadScene은 새로운 씬을 로드할 때 사용됩니다. 단일 쓰레드에만 작동하는 씬 로드입니다. SceneManager.LoadSceneAsync는 비동기적으로 씬을 로드할 수 있게 합니다. 씬 로드 상태를 추적할 수 있어 진행 상황을 알 수 있습니다. 따라서 로딩씬을 구현할 때 사용됩니다.

48. Unity의 물리 엔진은 어떻게 동작하며, 어떤 요소를 조작할 수 있는지 설명해주세요.

유니티의 물리 엔진은 Rigidbody 컴포넌트와 Collider 컴포넌트를 통해 사용할 수 있습니다. Rigidbody는 게임 오브젝트의 물리적인 특성을 부여하는 데 사용되어 질량, 중력 작용 여부, 회전 제어 등을 조작할 수 있습니다. Collider는 게임 오브젝트의 경계를 정의하는 데 사용됩니다. 콜라이더는 다른 콜라이더와의 충돌을 감지할 수 있습니다.

49. Texture 와 Sprite 에 대해 설명해주세요.

텍스쳐는 주로 3D 게임 오브젝트의 표면에 적용되는 이미지 데이터입니다. 텍스쳐는 주로 게임 오브젝트의 Material에 할당되어 렌더링됩니다. 스프라이트는 2D 그래픽 오브젝트를 나타냅니다. 일반적으로 유니티에서는 Sprite Renderer 컴포넌트를 통해 화면에 렌더링 됩니다.

50. 프리팹(Prefab)이란 무엇이며, 어떻게 사용되나요?

프리팹이란 재사용 가능한 게임 오브젝트의 템플릿이라고 볼 수 있습니다. 반복적으로 사용되는 요소들을 효율적으로 관리하기 위해 사용되는 것으로, 게임 씬에 배치된 오브젝트를 프로젝트 폴더로 드래그하면 프리팹화할 수 있습니다.

51. 디버깅을 어떤 방식으로 진행하는지 설명해주세요.

저는 디버깅에 크게 중단점과 콘솔 출력을 사용합니다. 콘솔창의 로그를 살펴보고 오류 위치에 중단점을 걸어 디버깅 모드로 들어가면, 스크립트의 어떤 위치에서 버그가 발생했는지 확인할 수 있습니다. 만약 이 방법으로도 감지할 수 없는 버그라면 콘솔 출력을 통해 코드의 현재 상태를 추적하여 디버깅합니다.

52. Attribute를 사용한 경험과 그에 대한 설명을 해주세요.

가장 자주 사용한 Attribute는 SerializedField입니다. private 필드를 Inspector 창에 표시할 수 있게 해주는 Attribute로, 실행 중에 값이 제대로 입력되었는지 손쉽게 확인할 수 있어 자주 사용하였습니다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보