돈까스 스터디 과제 20221226 면접대비

Jinho Lee·2022년 12월 26일
1
  • 돈까스 스터디 과제 - 면접대비 3

람다식과 익명함수는 무엇인가?

  • 람다식이란 익명함수를 만드는 방법으로, 람다 계산법을 프로그래밍에 적용한 것이다.

  • 람다 계산법이란 숫자를 포함한 모든 것을 함수로 표현한 계산법으로, 함수의 정의와 변수, 함수의 적용으로 이루어져 있다.

  • 익명함수는 이름이 없는 함수로, 대리자 및 람다식으로 만들 수 있다.

  • 익명함수의 사용으로 코드가 간결해지고 필요한 정보만을 사용해 성능을 향상시킬 수 있지만, 전체 순회 등의 경우는 비교적 느려질 수 있으며 익명함수의 특성상 함수 외부의 캡처를 위한 시간제약, 논리제약적인 요소도 고려해야 한다. 또한 남용하면 가독성이 떨어질 수 있고, 디버깅 시 추적이 어려워진다.

언제 사용할 수 있는가?

  • 이 익명함수가 두 번 다시 사용할 일이 없다고 판단되는 경우나, 함수를 인자로 받거나 결과값으로 반환하는 고차 함수의 인자 및 결과값으로 쓰일 수 있다.

  • 실무적으로 코드를 간결하게 만들고 지연 연산을 지원해 성능을 높이기에 적절한 곳에 사용하면 좋다.

클로저는 무엇인가?

  • 정의된 시점의 외부 변수, 필드 등 실행 환경을 저장하고 있는 함수를 의미한다.

  • C#의 경우 익명함수가 그것을 정의하고 있는 메소드의 로컬변수를 사용하는 경우, 그 익명함수는 클로저이다.

  • 실행 환경을 기억하기에 매개변수를 일일이 넘겨야 하는 수고가 줄어들고 변수 탐색에서 실행 환경에서만 찾기에 스코프 탐색에 시간이 덜 소모되는 등 실행 속도의 이점이 있다.

  • 하지만 실행 환경을 참조 형식으로 저장하기에 메모리 사용량이 늘어난다.

캡처는 무엇인가?

  • 위 클로저에서 저장되는 실행 환경에 해당하는 로컬변수, 혹은 저장하는 행동을 의미한다.

튜플은 무엇인가?

  • C#에서 제공하는 자료구조로, 여러 형식의 데이터를 그룹으로 묶을 수 있는 간단한 구조이다.

MonoBehaviour의 이벤트 함수는 무엇이 있고 언제 호출되는가?

  • Awake : 게임 오브젝트가 인스턴스화 된 직후에 호출. 게임 오브젝트가 시작하는 동안 비활성 상태인 경우 활성화될 때까지 호출되지 않는다.

  • OnEnable: 오브젝트 활성화 직후 이 함수를 호출.

  • Start: 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출.

  • FixedUpdate: FixedUpdate는 프레임 속도와 관계없이 신뢰할 수있는 타이머(기계에 따라 변하지 않는 타이머)에서 호출되기에, 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있다.

  • Update: Update 는 프레임당 한 번 호출.

  • LateUpdate: LateUpdate는 Update가 끝난 후 프레임당 한 번 호출. Update에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료된다.

  • OnApplicationQuit : 애플리케이션 종료 전 모든 게임 오브젝트에서 호출. 에디터에서는 사용자가 플레이 모드를 중지할 때 호출.

  • OnDisable: 동작(스크립트 인스턴스)이 비활성화되거나 비활성 상태일 때 호출.

  • OnDestroy: 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 호출.

Update, FixedUpdate, LateUpdate 는 어떤 차이가 있는가?

  • 먼저, 스크립트 라이프사이클 플로우차트 상에서 FixedUpdate -> Update -> LateUpdate 순으로 호출되며, FixedUpdate는 매 프레임 호출되는 Update나 LateUpdate와 달리 기계에 따라 변하지 않는 특정 타이머에 따라 호출되기에 호출 주기가 다르다.

Transform과 RectTransform은 어떤 차이가 있는가?

  • Transform은 점 하나의 좌표를 기준으로 나타내지만, RectTransform은 UI 요소 등 2D 레이아웃의 오브젝트를 안에 넣을 수 있는 사각형을 기준으로 나타낸다.

  • 또한, RectTransform은 Transform과 달리 Pivot과 Anchor를 지원한다.

  • Pivot과 Anchor는 RectTransform에서 다루는 사각형의 기준을 제공한다.

Coroutine이란 무엇인가?

  • 서브 루틴을 일시 정지하고 재개할 수 있는 구성 요소이다. 필요에 따라 일시 정지할 수 있는 함수라고도 할 수 있다.

  • Unity 및 C#의 경우, 코루틴은 주어진 YieldInstruction이 완료될 때까지 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메소드이다.

  • 멀티 스레드가 아님에 주의해야 한다.

  • 코루틴의 업데이트는 일반적으로 Update 함수가 반환된 후 실행된다.

IEnumerator와 IEnumerable은 무엇인가?

  • IEnumerator는 모든 열거자(Enumerator)의 기본 인터페이스로, 열거자를 사용하여 컬렉션의 데이터를 열거할 수 있도록, 즉 단순 반복으로 순회하며 참조, 읽을 수 있도록 돕는다.

  • 열거자는 C++의 반복자(Iterator)와 같은 역할을 하며, 반복자 패턴을 C#에서 지원하는 것이다. 컬렉션의 내부 구조와 상관 없이 동일한 방식으로 요소를 열거할 수 있게 해준다.

  • IEnumerable은 열거할 수 있는 모든 컬렉션의 기본 인터페이스로, 컬렉션에서 열거를 실행하는 열거자를 노출한다.

로컬 좌표와 월드 좌표는 무엇인가?

  • 로컬 좌표는 오브젝트를 기준으로 한 좌표로, 부모 오브젝트에 대한 자식 오브젝트의 상대 위치 또한 포함한다.

  • 월드 좌표는 월드의 절대 좌표계를 기준으로 한 좌표이다.

쿼터니언은 무엇이며 왜 사용하는가?

  • 사원수라고도 한다. 3D 그래픽에서 회전을 표현할 때 오일러 각의 회전행렬 대신 사용하는 수학적 개념으로 x, y, z의 3개의 실수 값만을 활용하는 오일러 각과 달리 x, y, z, w의 4개의 복소수로 이루어진 체계이다.

  • 회전행렬과 비교했을 때 많은 값을 사용해야 하고 그에 따라 연산량도 많아지는 회전행렬과 달리 4개의 값만 사용해 연산 속도가 빠르고 차지하는 메모리의 양도 적다. 더군다나 오일러와 달리 짐벌락 현상이 일어나는 것을 막을 수 있기에 사용한다.

짐벌락이란 무엇인가?

  • 오브젝트가 회전한 결과 한 방향으로 오브젝트의 두 회전축이 겹쳐, 오브젝트의 회전이 성분을 잃고 한 차원 낮아지는 현상이다.

Mesh란 무엇인가?

  • 3D 그래픽에서, 폴리곤이라 불리는 삼각형을 연결하여 이루어진 정점 더미로 표현되는 3차원 물체이다.

  • Unity에서는 점, 폴리곤(삼각형), UV를 관리하여 오브젝트의 모양을 정의하는 객체이다.

Material이란 무엇인가?

  • Unity에서 오브젝트 표면을 렌더링하는 방법을 정의하여 오브젝트의 디스플레이 방법을 정하는 데 중요한 역할을 하는 객체이다.

UV란 무엇인가?

  • 텍스처 좌표를 의미하며, 텍스처의 어느 부분이 정점 위치에 있는 메시 표면에 맞게 정렬되는지 가리킨다.

  • Unity는 메시 주위의 텍스처를 래핑할 때 UV를 사용한다.

셰이더란 무엇인가?

  • 메시에서 조명 입력과 Material 설정에 따라 렌더링된 각 픽셀의 컬러를 계산하는 스크립트이다.

렌더링 파이프라인이란 무엇인가?

  • 3차원으로 만들어진 모델을 가상 카메라를 기준으로 2차원에 투영하는 렌더링 과정의 프로세스를 표현한 것으로, 직렬로 차례대로 작업을 수행하는것이 파이프라인과 같다하여 렌더링 파이프라인이라 한다.

렌더링 파이프라인엔 무엇이 있는가?(DirectX9 기준)

  • 렌더링 파이프라인은 로컬 스페이스 -> 월드 스페이스 -> 뷰 스페이스 -> 후면 추려내기 -> 조명 -> 클리핑 -> 투영 -> 뷰포트 -> 래스터라이즈의 9단계로 요약할 수 있다.

  • 로컬 스페이스는 모델링 스페이스라고도 불리며, Mesh를 정의하는데 이용한다.

  • 월드 스페이스는 위치, 크기, 방위를 포함하는 각 물체 간 관계를 정의하는 월드 변환에 이용된다.

  • 뷰 스페이스에서 가상 카메라가 월드 내에서 임의의 위치나 방위를 가져 차후 작업이 번거로워지지 않도록 카메라를 월드 시스템의 원점에서 정방향을 보도록 변환하는 작업이 이루어진다. 이때 월드 내의 모든 물체가 가상 카메라의 시야가 변하지 않도록 같이 변환한다.

  • 후면 추려내기는 가상 카메라에 보이지 않는 폴리곤의 후면을 연산에서 제외함으로써 이득을 얻는 작업을 말한다.

  • 조명 작업을 통해 월드를 비추는 광원을 정의하고 물체에 명암을 추가해 그래픽에 사실감을 더한다.

  • 클리핑은 카메라 시야 밖의 물체를 연산에서 제외하여 이득을 얻는 작업을 말한다.

  • 투영은 3D 장면을 모니터에 비출 2D 표현으로 변환하는 과정을 일컫는다.

  • 뷰포트 변환은 프로젝트 윈도우의 좌표를 화면의 직사각형으로 변환하는 과정을 말한다. 이때 화면의 직사각형을 뷰포트라고도 한다.

  • 래스터라이즈는 각각의 폴리곤을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정이다.

참조

0개의 댓글