객체지향 프로그래밍(Object Oriented Programing, OOP)에서의 단위어떤 데이터의 상태와 해당 데이터를 통해 실행하는 기능의 집합객체를 구성하기 위해 필요한 문법 요소. Instance를 생성하기 위한 내용을 포함구조와 기능을 정의하는 역할을 함In
생성자란 클래스에 의해서 정의된 객체(https://velog.io/@allhoon_718/C-1.-객체와-클래스/- 인스턴스를 구성할 때에 초기 설정을 위한 특수한 Method(함수)new 키워드를 통해 클래스를 생성할 때 사용되며, 클래스 이름과 동일한
클래스 내부에 변수 또는 함수를 선언할 때, 클래스의 내부 또는 외부에서 해당 변수에 접근하여 값을 확인하거나, 변경 또는 호출 및 참조를 가능하게 할지 여부를 표시하는 문법 요소그러나 클래스, 구조체, 인터페이스, 열거형에도 사용할 수 있음외부에서 내부의 요소에 접근
접근 제한자처럼 해당 클래스 등 요소의 기능 또는 행동을 제한하는 역할을 하는 문법 요소함수나 클래스 앞에 붙어 다음의 기능이 어떤 특징을 가지고 있는지 표현해당 한정자를 사용하는 요소는 클래스 자체에 존재하는 것임을 밝힘각각의 인스턴스가 모두 공유하는 공통적인 요소임
객체 지향 프로그래밍에서 지켜져야할 5가지 원칙을 의미해당 원칙을 적용하면 코드의 확장 및 유지보수에 유리하며 복잡도를 낮춰 생산성을 높일 수 있음단일 책임 원칙, 하나의 클래스는 하나의 책임만 가져야 함을 의미하나의 클래스가 여러 가지를 담당할 경우, 기능을 수정할
다형성이란 동일한 호출에 대해 각각의 타입에 따라서 다르게 작동하는 구조를 말함.이는 주로 클래스나 인터페이스의 상속을 통해 구현됨부모 클래스에서 abstract, virtual로 정의된 메서드를 override하여 현재 클래스에 맞게 구현하여 다형성을 가지는 프로그램
부모 클래스에서 abstract, virtual한정자를 가진 요소를 자식 클래스에서 구현할 때 override를 통해 재정의하는 것재정의할 때는 함수의 제한자, 반환 값, 매개변수, 이름이 동일해야함자식 클래스에서 부모 클래스의 메서드를 재정의해 보다 구체적인 기능을
기본적으로 위와 같은 구조를 가진다. static 클래스의 static 함수로 매개변수에 this 키워드를 사용하면 위의 구조로, 앞에 있는 변수가 메서드의 매개 변수로 들어가게 된다. 기본적으로 Static 클래스의 Static 함수이므로 해당 클래스에 생성자 없이
주요한 특징은 함수를 다른 함수의 인자로 전달하는 것UI나 키 입력 등 특정 입력이 발생했을 때 특정 함수를 실행하도록 하는 데에 사용위의 EffectDictionary 클래스는 Add, Remove 등 값에 변경이 있는 기능이 실행될 경우 Inoke();를 호출해 A
메서드에 대한 참조를 저장하고 있는 변수, 반환 타입과 매개 변수가 일치하는 함수를 델리게이트에 등록하여 해당 델리게이트를 Invoke();함으로써 등록된 함수를 호출할 수 있다.반환 타입이 있는 델리게이트는 Func<> 형식을 사용하고, 반환 타입이 없는 델리게
event는 어떤 객체가 발생시키는 상황이나 신호를 의미한다.eventHandler는 event가 발생할 때마다 해당 상황을 처리하기 위해 호출되는 함수를 지칭한다.델리게이트를 기반으로 만들어지지만, 이와 다른 점은 외부에서 직접 event를 호출할 수 없다는 점이며,

기존 델리게이트는 Unity 에디터 상에서 Inspector에 표시되지 않지만, Unity Event는 Inspector 창에서 확인할 수 있어, event 활용을 쉽게 시각화하여 확인할 수 있다.일반적으로 Unity의 UI 요소에서 Button에 기능을 할당할 때에
참조 형식과 값 형식에 대해 설명해주세요. 값 형식 값 형식을 가지는 변수들은 다른 변수에서 해당 변수를 저장할 때, 해당 값 자체를 저장하는 형식
프로그램이 실행될 때 운영체제로부터 할당받는 메모리 공간은 크게 코드 영역(Code Area), 데이터 영역(Data Area), 스택 영역(Stack Area), 힙 영역(Heap Area)으로 나눌 수 있음실행할 프로그램의 코드가 저장되는 영역읽기 전용(Read-O
값 형식을 가지며, 그렇기에 스택 영역에 할당되는 특징을 가짐클래스에서는 가능한 상속 및 기본 생성자를 통한 생성이 불가(인터페이스는 활용 가능)값 형식이므로 값을 전달할 때 해당 값을 복사하여 전달하므로, 이전 변수의 참조하지 않아 변화가 반영되지 않음작은 크기의 데
객체를 복사하고자 할 때, 새로운 객체가 기존 객체의 메모리 주소를 참조하는 방식으로 복사같은 메모리 주소를 참조하기 때문에 원본과 복사된 객체의 값이 동일하게 변경됨참조 타입 변수를 복사할 때 일반적으로 얕은 복사가 발생새로운 객체에 기존 객체가 가진 값을 복사하여
박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요. 박싱 값 형식 변수를 참조 형식 변수에 담아, 박싱된 변수를 복사할 경우에는 얕은 복사가 발생해
C\`\`\`class Parent1 {}class parent2 {}class Child : Parent1, Parent2 {} // 다중 상속 불가class Parent {}class Child1 : Parent {}class Child2 : Child1 {}
다이아몬드 문제는 다중 상속으로 인해 발생할 수 있는 모호성으로 인한 문제를 말한다.위의 상황이 다중 상속으로 인해 발생하는 다이아몬드 문제이다. 해당 문제를 해결하기 위해 클래스의 다중 상속은 사용할 수 없고, 인터페이스에 대해서는 다중 상속이 허용 된다.인터페이스는
인터페이스는 프로퍼티나 메서드를 구체적으로 구현하지 않고, 인터페이스에 포함된 요소를 이를 상속받는 클래스에서 구현해야 함을 명시하는데 사용할 수 있음인터페이스는 주로 명명시 I(인터페이스 이름)의 구조를 가짐인터페이스는 직접 인스턴스화 할 수 없으므로 반드시 클래스에
두 요소의 공통점은 본문을 선언할 수 없다.상속 받는 클래스에서 구현을 강요하는 요소를 포함한다.직접 인스턴스화가 불가능하다.다형성을 구현하는데 직접적인 도움을 준다.추상 클래스는 인스턴스 필드를 가질 수 있지만, 인터페이스는 필드를 선언할 수 없다.(인스턴스는 프로퍼
런타임 중에 사용하지 않는 메모리의 해제를 실시하는 프로그램 내부의 프로세스사용하지 않는 객체를 수집하고 해제해 프로그래머가 직접 메모리를 할당하지 않도록 자동으로 관리해주는 역할을 함(C 언어의 경우에는 프로그래머가 직접 메모리를 할당/해제를 실시)GC는 힙 영역에
프로그래머가 직접 메모리를 해제하지 않아도 되므로, 실수로 인해 메모리가 해제되지 않아 발생하는 문제를 방지할 수 있음더 이상 참조되지 않는 객체를 메모리에서 제거하므로, 잘못된 메모리에 접근하는 것으로 발생하는 오류를 방지위 두 가지를 통해 메모리 누수를 방지하고 에
GC를 실시하기 위해서는 힙 영역에 있는 객체들이 참조되고 있는지 여부를 확인하는데, 이를 효율적으로 실시하기 위해 생존 기간에 따라 세대를 구분하여 실시한다.가장 최근에 생성된 객체들이 할당되는 세대, 수명이 짧고 금방 회수되는 객체들GC가 가장 빈번하게 발생하는 세
박싱만 해도 단순히 참조 형식의 변수를 사용하는 것보다 더 높은 비용을 요구하며, 박싱된 변수를 다시 언박싱 할 때도 비용이 요구되므로 자주 사용되지 않도록 주의해야함박싱한 변수를 형식이 알맞게 언박싱 할 경우는 괜찮지만 형식에 맞지 않게 언박싱을 실시할 경우 에러가
오브젝트 풀링의 구현에 관한 보다 구체적인 내용은 \[Unity] ObjectPooling 시스템 분석 포스트를 참고할 수 있을 것 같다.오브젝트 풀이란 자주 생성/소멸되어야하는 객체를 매번 사용 시에 생성, 소멸 하는게 아니라 미리 비활성화된 상태로 만들어두고 사용시
제네릭이란 클래스나 함수를 사용할 때까지 하나 이상의 형식을 지원하도록 디자인할 수 있다.위와 같은 구조를 가지며, 여러 형식을 가지도록 클래스나 메서드를 구성할 수 있다. 이를 통해 런타임에서 캐스팅을 사용하거나 박싱을 사용하면서 발생할 수 있는 문제를 제네릭 문법을
람다식은 1회용으로 사용할 함수에 대해 메서드를 따로 선언하지 않고 사용하도록 하는 문법이다.람다 선언 연산자 =>를 이용해 구현할 수 있고, (input-parameters) => expression와 같은 기본 구조를 가진다 람다 식은 delegate와 함께 사용
프로그래밍 언어에 Query 기능을 통합하여, 데이터의 필터링, 정렬, 집계를 동일한 API로 실행할 수 있게 하는 기능제네릭 IEnumerable<T> 인터페이스를 지원하는 배열이나 리스트를 LINQ를 이용한 데이터 조작 기능을 사용할 수 있음대표적으로 fore
리플랙션은 프로그램이 런타임 중에 객체의 구조를 확인할 수 있도록 하는 기능리플랙션을 이용해 어떤 형식인지 확인하거나, 속성을 가져와 값을 입력하는 등의 기능을 수행할 수 있음타입의 이름을 문자열로만 알고 있을 때 이를 실제 타입으로 가져오거나, 메서드를 실행하는 목적

Unity 생명주기(Unity Life Cycle)란 Unity에서 기본 제공되는 이벤트 함수들의 실행 순서를 말한다.아래의 다이어그램은 각각의 이벤트 함수들이 실행되는 순서와 어떤 처리 과정에서 호출되는지 표시한 것이다.(출처 : Unity 공식문서 - 이벤트 함수의
MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해 설명해주세요. 모든 Unity C# 스크립트가 상속받는 클래스 Unity 생명주기에서 활용되는 함수를 사용할 수 있게 함 주요 함수 Invoke() > 실행시 "InvokeStart" 로그 창에 추가,
객체에 추가된 스크립트에서 Update를 구현한 경우, 매 프레임마다 1번 실행됨이동과 충돌 등 물리현상을 구현할 때, 기기마다 성능이 달라 프레임 속도가 다를 경우 문제가 발생조건 : 매 프레임마다 1 unit 씩 Vector3.Forward 방향으로 이동1번 환경
이전 프레임에서 현재 프레임까지 흐른 시간을 나타냄Update()문의 경우 기기의 성능이나 환경에 따라 프레임 속도가 달라지므로, 시간에 따라 일정한 효과를 작동시켜야하는 경우에 deltaTime을 활용하여 이를 구현 Time.deltaTime 을 사용하는 경우 이전
일반적인 함수는 매개변수를 입력받고, 실행 후 반환값을 반환하는 과정을 거침(모든 과정은 단일 프레임 내에서 이루어짐)특정 함수를 실행하는 중간에 다른 함수를 실행하도록 하기 위해서는 코루틴을 사용해야함Update문을 사용하지 않으면서 특정 조건에서 반복적으로 실행되야
Invoke는 실행할 함수의 이름과 시간을 입력해 Invoke가 호출된 시점에서 입력된 시간만큼 흐른 후 입력한 이름을 가진 함수를 실행입력한 시간이 음수면 0으로 입력되고, 입력된 시간이 0일 경우 다음 프레임의 Update함수를 실행하기 전에 입력된 함수를 실행하지
코루틴은 얼핏 보기에는 다른 작업을 실시하는 동시에 또다른 작업이 실행되는 것으로 보여 멀티쓰레딩과 유사하게 보일 수 있음그러나 실제로는 동시에 두 가지 작업이 실행되는 것이 아니라 하나의 작업이 실행되는 중간에 또다른 작업이 중간 중간 개입하여 실행되는 것으로 하나의
아틀라스 활용Occlusion CullingLOD텍스쳐 최적화오브젝트 풀링등등 이 존재함게임에 적합한 전략을 활용하는 것이 중요Ex 1) 오브젝트를 많이 생성하지 않는 것에 대해 오브젝트 풀링을 적용하는 것은 의미가 적음Ex 2) Occlusion Culling의 경우
CPU가 렌더링할 오브젝트에 대해 GPU에 내리는 명령오브젝트가 많아져 드로우콜이 많아지면 CPU에서 GPU로 전달할 때 병목현상이 발생할 수 있음이는 CPU에서 GPU로 작업을 넘겨줄 때 GPU에서 실행하고 있는 작업을 방해하지 않기 위해 버퍼에 명령을 전달하므로,
GameObject.Find("오브젝트 이름")GameObject.FindWithTag("태그 이름")GameObject.FindGameObjectsWithTag("태그 이름")UnityEngine.Object.FindObjectOfType() 또는 GameObject
게임 오브젝트에서 가지고 있는 컴포넌트를 가져올 때 사용오브젝트 내에 있는 컴포넌트를 순회하며 요청된 컴포넌트 클래스가 있는지 확인Update는 매 프레임마다 호출되므로 매 프레임마다 모든 컴포넌트 목록을 순회하며 조건에 맞는 것을 찾는 것은 성능에 부하가 심함따라서
기본적으로 ,를 통해 데이터를 구분하는 형태의 데이터를 말함단순한 구조를 가지고 있으며, 파일 크기가 작음다만 복잡한 구조를 저장하기에는 적합하지 않음따라서 단순 테이블 형태의 데이터 교환에 유리단순한 구조이므로 파싱(Parsing) 속도가 빠름키와 값의 쌍으로 이루어
특정 데이터를 JSON으로 활용하기 위해 해야하는 작업은 무엇인가요? 특정 데이터를 JSON으로 활용하기 StageInstance 형식의 객체를 JSON으로 저장하는 클래스
기본적으로 public으로 선언된 변수, 배열, 리스트는 직렬화되어 인스펙터 창에 표시됨private으로 선언된 변수, 배열, 리스트는 \[SerializedField]를 추가해 직렬화 가능기본적으로 직렬화되지 않는 Dictionary나 클래스도 Serializable
멀티쓰레드를 사용하기 위해 Unity에서 권장하는 방식은 Job System이 있음다른 쓰레드에서 실행할 작업을 'Job'으로 구분하고, 메인 쓰레드에서 해당 Job을 작업 쓰레드로 전달간단한 예시로 IJob 인터페이스를 가진 클래스에서 Execute()에 다른 쓰레드
기본적으로 직렬로 계산을 실행 = 한 번에 하나의 계산만 실행코어 수가 적고, 각각의 코어는 복잡한 연산을 처리하기에 특화됨따라서 복잡한 작업은 CPU를 통해서 처리하는 것이 유리병렬로 계산을 실행 = 한 번에 여러 개의 계산을 실행렌더링과 같이 동시에 여러가지 연산이
게임 전체 공간을 말함각각의 모든 오브젝트들은 월드 스페이스에서의 위치를 가지고 있음오브젝트들의 이동은 월드 스페이스를 기준으로 처리해야함(0,0,0)이라는 절대적인 원점을 가지고 있으며 해당 원점을 통한 절대 좌표를 사용각각의 오브젝트가 가지는 공간을 말함자식 오브젝
내적은 한 점에서 다른 점으로 선을 그었을 때, 방향을 구하는 데에 자주 활용됨두 벡터의 요소를 곱해 나온 값을 더해 구할 수 있음A ⋅ B 형태로 쓰며 스칼라 값을 반환A ⋅ B = |A| |B| cosθ 가 성립하는 점을 이용해 cosθ를 구하는데 활용 가능두 벡터
x, y, z 축을 각각 회전에 물체의 회전을 계산y 축 회전을 Yaw, z축 회전을 Roll, x축 회전을 Pitch라고 함각각의 회전은 정해진 순서에 따라 회전 행렬을 처리그러나 특정 상황에서 두 기저축(Ex: x축과 y축)이 같은 회전을 수행할 때가 있으나 그 조
OSI 계층 모델에서 전송층에서 실행되는 프로토콜특성1) 신뢰성: 패킷 손실, 중복, 순서를 보장(연결 기반이라 해결가능)2)연결지향적: 느슨한 연결을 가짐 = 패킷이 오지 않으면 연결 유지하지 않음 ↔ 강한 연결=가상회선전송 패킷의 순서를 알려주지 않는 비신뢰적 서비
Vertex FetchVertex ShaderPrimitive Assembly테셀레이션Geometry Shader클리핑컬링뷰포트 변환래스터라이제이션프래그먼트 쉐이더Output MergeCPU로부터 드로우 콜을 받아 이를 갖고 있는 프레임 버퍼에서 가져온 정보를 렌더링
GPU가 메모리에서 정점(Vertex) 데이터를 가져오는 과정정점 배열 또는 버퍼(Buffer)의 형태로 저장버텍스 쉐이더를 호출해 입력데이터(속성)를 자동적으로 제공하여 변환 및 조작 작업을 실행할 수 있게함버텍스 페치에서 가져온 정점 데이터를 처리, 속성을 계산해
3D 모델의 정점 위치를 계산하거나 최종 색상을 결정하는데 영향을 주는 프로그램= 렌더링 되는 오브젝트의 최종적인 시각적인 형태를 결정맵은 3D 오브젝트를, 플레이어는 2D 스프라이트를 사용하는 게임 개발에서 카메라 방향에 따른 스프라이트 왜곡을 방지하기 위해 Bill
리스트 내의 각각의 요소들이 node역할을 하며 자신의 앞과 뒤의 node와 연결되어 있다.위와 같은 함수를 사용할 수 있으며, 특정 노드에 대해서 중간에 값을 추가, 제거 하는 것에 특화되어 있다.배열과 달리 각각의 노드들은 비연속적이며, 자신의 앞과 뒤에 관한 메모
Push()를 통해 데이터를 추가하고, Pop()을 통해 꺼내서 사용하는 자료구조후입선출의 특성을 가져 Pop() 실행시 가장 마지막에 추가한 데이터가 출력됨Pop()을 통해 데이터를 읽을 때 Stack에서 동시에 제거되는 특징이 있음임시 저장소로서의 역할을 하기에 적
Stack과 유사하지만 후입 선출인 Stack과 달리 선입 선출인 특성을 가짐Enqueue()를 통해 데이터를 추가하고, Dequeue()를 통해 데이터를 꺼내서 읽을 수 있다.Stack과 동일하게 Dequeue()를 통해 가장 먼저 추가한 데이터에 접근함과 동시에 Q
여러 개의 node들과 이를 연결하는 link로 이루어진 그래프하나의 node는 여러 개의 link를 통해 여러 개의 node들과 연결되어 있을 수 있다.여러 개의 node들로 구성된 그래프에서 각각의 node를 한번씩 방문하는 것을 순회라고 한다.크게 깊이 우선 탐
한 브랜치를 가능한 깊게 전부 확인한 후 다음 브랜치를 탐색탐색 순서에 따라 구분루트 노드에서 시작해 서브 브랜치들을 순회트리를 복사하기 위해 전체 구조를 순회할 때 유리한쪽에서 부터 서브 브랜치를 순회하기 시작이후 루트를 거쳐 다음 서브 브랜치로 이동모든 서브 브랜치
캐릭터의 행동을 제어하기 위한 규칙으로 구성된 트리루트에서 부터 시작해 현재 조건에 맞는 행동을 결정여러 자식 노드의 실행 흐름을 제어합니다.Sequence (순서): 자식 노드를 왼쪽에서 오른쪽 순서로 실행합니다. 모든 자식 노드가 성공해야 자신도 성공(Success
주어진 월드 상에서 갈 수 있는 정점과 갈 수 없는 정점을 구분해, 특정 목표 지점까지 갈 수 있는 경로를 찾는 방법로컬 방식은 자신의 주변에서 인식할 수 있는 정보만을 활용하여 길찾기를 실행(현재 정면에 장애물이 있는지 없는지 판단)글로벌 방식은 전체 영역을 파악해