본문 바로가기

전체 글

(62)
2024/04/04 TIL 오늘 학습한 내용 [기술면접연습] 유니티 렌더링 파이프라인에 대해 설명해보세요. 유니티의 렌더링 파이프라인은 그래픽스를 렌더링하는 과정을 관리하는 시스템입니다. 다양한 종류의 렌더링 파이프라인이 있으며, 유니티의 버전에 따라 다를 수 있습니다. 우선 기본적인 렌더링 파이프라인으로 포워드 렌더링이 있습니다. 각 렌더링 패스에서 씬의 모든 물체를 순차적으로 렌더링하며 그렇기 때문에 물체의 수가 많지 않을 때 빠르고 효율적입니다. Scriptable Render Pipeline (SRP)은 사용자가 자체적으로 커스터마이징할 수 있는 렌더링 파이프라인입니다. 이 중 Universal Render Pipeline (URP)는 크로스 플랫폼 및 모바일 프로젝트에 적합한 경량 렌더링 파이프라인입니다. High Def..
2024/04/02 TIL 오늘 학습한 내용 [기술면접연습] Update의 종류와 각각 어떤 특징을 가지고 있는지 설명해주세요. Update(): 매 프레임마다 호출되는 메서드로, 게임 오브젝트의 동적인 동작을 업데이트하는 데 사용됩니다. FixedUpdate(): 물리 엔진과의 상호작용이 필요한 경우, Update() 대신에 사용됩니다. LateUpdate(): 모든 Update() 메서드가 호출된 후에 호출되며, 주로 카메라 추적, 타겟 따라가기, 오브젝트 간 상호작용 등에 사용됩니다. 서로 다른 성능을 가진 기기에서 Update 사용 시 주의할 점에 대해 설명해주세요. Frame Rate의 변화: 서로 다른 기기에서 실행되는 앱은 각각의 하드웨어 성능에 따라 다양한 프레임 속도로 실행될 수 있습니다. 따라서 Update 메서..
2024/04/01 TIL 오늘 학습한 내용 [기술면접연습] MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해 설명해주세요. Awake(): 초기 설정이나 리소스 로드와 같은 한 번만 실행되어야 하는 작업을 수행하는 데 사용됩니다. Start(): 초기화된 값들을 기반으로 게임 오브젝트의 동작을 초기화하거나 게임 시작 전에 필요한 작업을 수행하는 데 사용됩니다. Update(): 매 프레임마다 호출되는 메서드로, 게임 오브젝트의 동적인 동작을 업데이트하는 데 사용됩니다. FixedUpdate(): 물리 엔진과의 상호작용이 필요한 경우, Update() 대신에 사용됩니다. LateUpdate(): 모든 Update() 메서드가 호출된 후에 호출되며, 주로 카메라 추적, 타겟 따라가기, 오브젝트 간 상호작용 등에 사용됩..
2024/03/29 TIL [기술면접연습] MVC 모델이란 무엇인지 설명해주세요. MVC(Model-View-Controller) 모델은 소프트웨어 디자인 패턴 중 하나로, 애플리케이션을 세 가지 주요 구성 요소로 분리하여 관리하는 방법입니다. 이 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 구성되며, 각각의 역할은 데이터 처리, 사용자 인터페이스 표시, 사용자 입력 처리입니다. 이를 통해 애플리케이션의 유지 보수성, 확장성 및 재사용성을 향상시킬 수 있습니다. Unity 의 생명주기(Unity Life Cycle)에 대해서 설명해주세요. Unity의 생명주기(Unity Life Cycle)는 애플리케이션이 실행되고 종료될 때까지의 과정을 단계별로 나타내는 것입니다. 이 중요한 단계들은 초기화(Ini..
2024/03/28 TIL [기술면접연습] 인터페이스와 추상클래스의 차이를 설명해주세요. 다중 상속: 클래스는 하나의 추상 클래스만 상속할 수 있지만, 여러 인터페이스를 구현할 수 있습니다. 추상 클래스는 클래스 간의 공통된 특징을 추출하여 상속 관계를 통해 재사용성을 높이는 데 사용되며, 인터페이스는 클래스 간의 관계를 정의하고 상호 작용을 지원하는데 사용됩니다. 디자인 패턴(Singleton, Observer 등) 사용하는 이유는 무엇인가요? 디자인 패턴을 사용하는 이유는 코드의 재사용성을 높이고 유지보수성을 향상시키기 위함입니다. 패턴은 공통된 문제 상황에 대한 해결책을 제시하여 개발자들이 일관된 방식으로 문제를 해결할 수 있도록 돕습니다. 이는 코드의 일관성을 유지하고 개발과 유지보수를 용이하게 만들어줍니다. Singlet..
2024/03/27 TIL 오늘 학습한 내용 [기술면접연습] 상속이란 무엇인지 프로젝트 내에 적용해 본 부분과 함께 예를 들어 설명 부모에서 추상적인 형태를 주고, 자식에서 세밀화하여 유연하게 코드를 작성할 수 있으며 생산성, 유지보수성 또한 올라간다. 프로젝트에서 인벤토리의 아이템 슬롯과 장착 아이템 슬롯을 나눠서 구현했는데 기능이 겹치는 부분이 많아서 아이템 슬롯에 상속을 적용했고 기능 구현에 조금 차이가 있는 부분은 virtual과 override를 사용했습니다. 오버로딩과 오버라이딩의 차이점을 설명 오버로딩은 같은 이름의 함수라도 인자(Parameter) 타입이 다르거나, 개수가 다르면 다른 함수로 정의하여 사용할 수 있는 것이고 오버라이딩은 상속 관계에서 부모의 메서드를 자식이 자기에 맞게 재정의 해서 사용하는 것입니다...
2024/03/25 TIL 오늘 학습한 내용 [기술면접연습] 선택 정렬과 버블 정렬에 대해 설명해주시고, 코드를 작성 선택 정렬(Selection Sort): 선택 정렬은 리스트에서 가장 작은(또는 큰) 값을 찾아 첫 번째 위치와 교환하는 방식으로 동작합니다. 이후, 두 번째로 작은 값을 찾아 두 번째 위치와 교환하고, 이를 리스트의 끝까지 반복하여 정렬을 완성합니다. 버블 정렬(Bubble Sort): 버블 정렬은 인접한 두 원소를 비교하여 순서가 잘못되어 있으면 서로 교환하는 방식으로 동작합니다. 한 번의 패스로 가장 큰 원소가 마지막으로 이동하므로, 패스를 한 번 수행할 때마다 리스트의 마지막 원소는 정렬이 완료됩니다. 패스를 반복하여 정렬이 완료될 때까지 진행합니다. 오늘의 회고 해야 할 일
2024/03/22 TIL 오늘 학습한 내용 [기술면접연습] 정렬 알고리즘이란 무엇이며, 사용 이유에 대해 설명 정렬 알고리즘은 데이터를 특정한 기준에 따라 순서대로 정렬하는 알고리즘입니다. 데이터를 정렬함으로써 검색, 삽입, 삭제 등의 연산을 효율적으로 수행할 수 있습니다. 오늘의 회고 해야 할 일
2024/03/21 TIL 오늘 학습한 내용 [기술면접연습] 콜백이란 무엇인지 설명 콜백은 함수나 메서드를 다른 함수의 매개변수로 전달하여, 특정 이벤트 발생 시 실행되도록 하는 프로그래밍 패턴입니다. 주로 비동기 작업, 이벤트 처리, 상태 변화 등에서 사용됩니다. 오늘의 회고 해야 할 일
2024/03/20 TIL 오늘 학습한 내용 [기술면접연습] 람다식(Lambda Expression)이 무엇인지 설명 람다식은 익명 함수를 간결하게 표현하는 방법으로, 더 간단한 구문으로 함수를 정의하고 전달할 수 있게 해줍니다. 주로 델리게이트나 함수형 프로그래밍에서 사용됩니다. 오늘의 회고 [상점 구현] 스크럼에서 팀원이 FindObjectOfType는 비효율적이고 프리팹을 할당해서 이용하는 것이 좋다는 말을 했다. 그런데 사실 어떤 오브젝트가 상점을 들고 있을지 모르겠어서 이렇게 임시로 처리한거라 그 내용에 관해 물어보니 좀 더 생각해 봐야 될 것 같다고 답변을 들었다. 해야 할 일 프로젝트 병합하기
2024/03/19 TIL 오늘 학습한 내용 [기술면접연습] 'delegate', 'event', 'action', 'func' 간의 차이를 설명. (꼬리질문) 프로젝트에 적용해 본 경험이 있다면 설명 Delegate: 대리자(delegate)는 메서드에 대한 참조를 저장하고 호출하는데 사용됩니다. 다른 메서드를 대신 호출할 수 있는 메서드에 대한 형식적인 형식을 제공합니다. Event: 이벤트(event)는 대리자의 특수한 형태로, 다른 객체들에게 특정 상황이 발생했음을 알리는 역할을 합니다. 이벤트는 클래스 내부에서 발생한 사건을 외부에 알리는 데 사용됩니다. Action: Action은 매개변수를 받지 않는 메서드를 나타내는 대리자입니다. Action은 반환 값을 가지지 않는 메서드를 참조하는 데 사용됩니다. Func: Fu..
2024/03/18 TIL 오늘 학습한 내용 [기술면접연습] 델리게이트(Delegate)의 개념에 대해 설명 델리게이트는 다른 메서드를 참조하고 호출할 수 있는 참조 형식으로, 메서드의 대리자 역할을 합니다. 이를 통해 메서드를 변수처럼 전달하고 다룰 수 있으며, 이벤트 처리, 비동기 프로그래밍 등 다양한 상황에서 유용하게 활용됩니다. 오늘의 회고 [유니티 메타 파일] 스프라이트 이미지를 수정하려고 했는데 데이터를 불러올 때 계속 이전의 이미지가 불러와져서 검색을 통해 문제를 해결했다. 문제는 스프라이트 이미지를 변경할 때 윈도우에서 파일을 수정했기 때문이었다. 메타 파일과 관련이 있었다는 것을 알게 되서 관련된 내용을 아래 적어둔다. 새로운 파일을 유니티 Assets 폴더 안에 생성하면 그 에셋에 하나만 존재하는 ID값을 할당한..
2024/03/15 TIL 오늘 학습한 내용 [기술면접연습] 제네릭이란 타입(Type)을 매개변수화하여 코드의 재사용성과 유연성을 높이는 기법입니다. 제네릭의 사용을 통해 타입 안정성(type safety), 코드의 재사용성, 성능 향상 등의 이점을 얻을 수 있습니다. 오늘의 회고 [2D 플랫폼 맵] 오늘은 플랫포머 맵 생성과 관련한 자료를 찾아보았고 그 중에서 배경이 무한하게 움직이는 방법을 중점적으로 알아봤다. 해야 할 일 [인벤토리] 인벤토리에서 아이템 장착 시 캔버스의 캐릭터의 아이템도 변경되도록 하기 → 아이템 스프라이트 팀 프로젝트에서 사용중인 에셋에 맞춰 변경해야 함 인벤토리 칸 간격 늘리기 인벤토리 관련한 코드내용 숙지하기 [맵] 맵 만들고 꾸미기
2024/03/14 TIL 오늘 학습한 내용 [기술면접연습] 배열과 List, ArrayList, Dictionary 의 차이점을 설명 배열은 고정된 크기를 가진 자료 구조형입니다. 리스트는 배열과 유사한 자료구조 이지만 동적 크기를 갖고 있습니다. ArrayList는 크기가 동적으로 조절되는 자료 구조형입니다. 모든 작업에 대해 캐스팅이 필요해 리스트보다 성능이 떨어질 수 있습니다. 딕셔너리는 키-값 쌍으로 데이터를 저장하는 자료구조입니다. 해시함수를 이용한 해시값을 저장하고있는 해시테이블이란 자료구조를 사용하기 때문에, 빠른 탐색이 가능합니다. 오늘의 회고 [코드 수정] 데이터를 관리하는 방식을 엑셀로 바꾸고 거기에 맞춰 코드를 수정하였다. 해야 할 일
2024/03/13 TIL 오늘 학습한 내용 [ 박싱과 언박싱에 대하여 설명 ] 박싱은 값 형식을 참조 형식으로 변환하는 과정이고 언박싱은 참조 형식을 값 형식으로 변환하는 것입니다. 추가적인 메모리 할당과 데이터 복사 과정이 필요하므로 성능에 영향을 줄 수 있는 점을 유의해야 합니다. 오늘의 회고 [인벤토리 기능구현] 1. SO로 사용했던 아이템데이터를 엑셀투제이슨으로 사용하기 위해 코드 변경 중 [트러블 슈팅] 팀원들과 브랜치를 병합하는 과정에서 an error occurred while resolving packages project has invalid dependencies 유니티 에러가 발생함. 구글링해서 찾아보니 설치된 패키지의 문제라고 하는데 프로젝트 진행에 필요한 패키지는 아닌 것 같아서 manifest.json에..
2024/03/12 TIL [알고리즘] 이상한 문자 만들기 짝수 번째 대문자, 홀수 번째 소문자, 공백이 있으면 인덱스 초기화 public class Solution { public string solution(string s) { string answer = ""; int index = 0; for (int i = 0; i < s.Length; i++) { if (s[i] == ' ') { answer += s[i]; index = 0; continue; } if (index % 2 == 0) { answer += s[i].ToString().ToUpper(); index++; } else { answer += s[i].ToString().ToLower(); index++; } } return answer; } } [기술면접연습..
2024/03/11 TIL 오늘 학습한 내용 [알고리즘] 3번 뒤집기 진법에 대한 지식이 부족해서 구글링을 통해 문제 해설을 참고하여 진행하였다. while문을 진행하는 동안 반환되는 n의 값의 순서가 3진법과 같은데 아래의 코드는 3진법을 다시 10진법으로 변환하는 과정을 나타내고 있다고 한다. using System; public class Solution { public int solution(int n) { int answer = 0; while(n > 0) { answer *= 3; answer += n % 3; n /= 3; } return answer; } } [기술면접연습] struct와 class를 비교해서 설명 struct는 값형, class는 참조형인 차이가 있습니다. 이와같은 차이 때문에 struct는 Sta..
2024/03/08 TIL 오늘 학습한 내용 [알고리즘] 최대공약수와 최소공배수 최소공배수는 최대공약수 * (num1/최대공약수) * (num2/최대공약수) 두 수로 서로 나눴을 때 나머지가 0이 아니면 최대공약수를 구해줘야 한다. public class Solution { public int[] solution(int n, int m) { int[] answer = new int[2]; if(n % m == 0 || m % n == 0) // 작은 수가 최대공약수 { if(n>m) { answer[0] = m; answer[1] = m * (n / m); } else { answer[0] = n; answer[1] = n * (m / n); } } else { int temp = 0; int num1 = n; int num2 =..
2024/03/07 TIL 오늘 학습한 내용 [기술면접연습] ref와 out의 사용 시 차이 두 키워드의 차이는 매개 변수의 초기화 입니다. 두 키워드 모두 값 형식을 참조로 전달하는데 사용되지만 ref 매개변수는 사용하기 전에 초기화해야 하는 차이가 있습니다. out 키워드는 전달하기 전에 이전의 값이 모두 무시되기 때문에 초기화 할 필요가 없습니다. ref 키워드는 기존 변수를 메서드에서 수정하려 할 때 사용하고 out 키워드는 메서드 내에서 생성 된 값을 반환할 때 사용합니다. [ 동적 스크롤 인벤토리 ] 무한 스크롤 원리를 이용해 컨텐츠의 범위에서 벗어난 오브젝트를 재활용 하는 것. 일부 오브젝트만 이용하여 데이터만 교체해 주는 오브젝트 풀링 방식 오늘의 회고 해야 할 일 1. 동적 스크롤 인벤토리 구현하기
2024/03/06 TIL 오늘 학습한 내용 [기술면접연습] float와 int의 표현 가능한 수의 범위가 다른 이유 int와 float의 저장 형식이 다르기 때문입니다. 둘 다 4byte의 크기를 가지고 있지만 int는 1비트로는 부호, 나머지 31비트를 활용하여 수를 표현하고 float는 나머지 31비트를 지수,가수부로 나누어 8비트의 지수부, 23비트의 가수부를 활용해 수를 표현하는 차이가 있습니다. [try catch] 프로그램의 비정상적인 종료를 방지, 오류가 발생한 곳을 빠르게 파악 가능 using System; namespace Example { class Program { // 실행 함수 static void Main(string[] args) { // 피제수의 변수 int dividend = 10; // 제수의 변..
2024/02/28 TIL 오늘 학습한 내용 [알고리즘] 약수의 개수와 덧셈 로직 : 두 정수의 길이를 체크해서 정수의 약수가 짝수면 더하고 홀수면 빼는 것을 길이만큼 반복해야 겠다. 생각자체는 금방 떠올렸는데 문제는 이것을 코드로 구현하는데서 막혔다. 2중 반복문을 쓰면 될 것 같다고 생각은 했는데 약수가 짝수인지 홀수인지를 체크하는 과정에서 count의 초기화를 어디서 해야하는지 감을 잡지 못 했다. 한참을 고민하다 결국 질문하기 탭을 눌러서 다른 사람이 질문한 내용을 보고 감을 잡았다. using System; public class Solution { public int solution(int left, int right) { int answer = 0; int length = (right - left) + 1; int c..
2024/02/26 TIL 오늘 학습한 내용 [알고리즘] 수박수박수박수? 몫이 = 수박 나머지가 = 수 public class Solution { public string solution(int n) { string answer = ""; int temp = n / 2; int temp2 = n % 2; if (temp2 == 0) { for (int i = 0; i < temp; i++) { answer += "수박"; } } else { for (int i = 0; i < temp; i++) { answer += "수박"; } answer += "수"; } return answer; } } 다른 사람의 풀이 public class Solution { public string solution(int n) { string answ..
2024/02/23 TIL 오늘 학습한 내용 [알고리즘] 가운데 글자 가져오기 단어의 길이가 홀수면? →몫 + 나머지 = 인덱스번호 단어의 길이가 짝수면? → 나누기 2를 해서 몫 -1 번인덱스 + 몫 인덱스 문자열의 문자를 리스트로 만들어서 풀어야 겠다고 생각함. using System.Collections.Generic; using System.Linq; public class Solution { public string solution(string s) { string answer = ""; List chars = new List(); chars.AddRange(s.Select(c => c.ToString())); int length = s.Length; if(length % 2 != 0) { int temp1 = lengt..
2024/02/21 TIL 오늘 학습한 내용 [알고리즘] 제일 작은수 제거하기 C# 문법강의 정렬 알고리즘을 참고해서 풀어보려 시도했다. 선택정렬 - 최소값이 2번 인덱스에 있을 때 0번 인덱스 < 1번 인덱스 면 배열 순서가 달라지는 문제가 있음. 선형탐색 - arr의 최소값을 int target에 넣어주고 배열의 i번 인덱스가 target과 같으면 해당 인덱스의 요소를 빼고 나머지 요소 반환한다. using System; using System.Linq; public class Solution { public int[] solution(int[] arr) { int[] answer = new int[] {}; int target = arr.Min(); if(arr.Length == 1) { answer = new int[arr..
2024/02/20 TIL 오늘 학습한 내용 오늘의 회고 배열에서 제일 작은 수를 제거한 배열을 반환하는 알고리즘 문제를 풀다가 막혔다. 만약 배열 arr의 길이가 1이면 arr[0] = -1 배열을 내림차순으로 정렬해서 arr - 1 인 길이의 배열에 숫자를 집어넣어서 리턴해야겠다고 생각해서 Array.Sort(arr); Array.Reverse(arr);를 이용했는데 테스트 문제는 통과했지만 정답 제출에서 모두 실패가 나왔다. 테스트 케이스를 추가해보니 기본 테스트케이스 배열이 역순으로 정렬된 배열이어서 통과된걸 알았다. 문제에서 요구하는 건 배열안의 요소가 [5,3,1,2,6,9] 처럼 되어있을 때 [5,3,2,6,9]가 배열이 되게 만드는 것이고 정렬을 하는게 아닌 것 같다. 배열에서 최소값을 구해서 어떻게 해보면 될 것 ..
2024/02/19 TIL 오늘 학습한 내용 [알고리즘] 없는 숫자 더하기 숫자의 총합 45에서 배열의 총합을 빼면 되겠다고 생각했다. 그런데 풀고나서 생각해보니 다른 배열에 적용할 때를 고려하면 total = 45 보다는 모든 수가 들어있는 배열을 선언하고 그 배열의 총합에서 뺀 값으로 풀면 좋았을 것 같다. using System; public class Solution { public int solution(int[] numbers) { int answer = -1; int total = 45; int sum = 0; for (int i = 0; i < numbers.Length; i++) { sum += numbers[i]; } answer = total - sum; return answer; } } 다른 사람의 풀이 LI..
2024/02/16 TIL 오늘 학습한 내용 오늘의 회고 여태까지 공부한 내용을 돌아볼 시간이 필요하다고 느꼈다. 여태까지 진행했던 개인과제의 코드들을 다시 살펴보면서 내가 어떤 의도를 가지고 코드를 작성했는지 생각하고 개선할 점을 찾아보려 한다. 또한 코드를 작성하면서 헷갈리는 부분들을 찾아서 그 내용을 다시 한 번 정리해보려 한다. 해야 할 일
2024/02/14 TIL 오늘 학습한 내용 [코루틴] 문자열로 실행하는 방법 문자열을 사용하여 코루틴을 실행할 때는 코루틴의 이름을 문자열로 전달합니다. 예를 들어, **StartCoroutine("MyCoroutine")**과 같이 사용합니다. 코루틴의 이름이 변경되거나 오타가 발생할 경우 런타임 시 오류가 발생합니다. 문자열로 코루틴을 실행하는 방법은 유니티의 이전 버전에서 주로 사용되었으나, 현재는 권장되지 않습니다. 함수 호출로 실행하는 방법 함수 호출을 통해 코루틴을 실행할 때는 코루틴의 메서드를 직접 호출합니다. 예를 들어, **StartCoroutine(MyCoroutine())**과 같이 사용합니다. 함수 호출을 사용하면 컴파일 타임에 코루틴이 실제로 존재하는지를 체크할 수 있습니다. 따라서 오타나 잘못된 코루틴 ..
내일배움캠프 34일차 TIL 오늘 학습한 내용 [저작권] 퍼블리쉬로 돌리거나 / 런칭하기 전에 저작권 관련해서 증거자료를 모아둬야 한다.(구매내역, 영수증, 저작권자에게 보낸 이메일 등) [스탠다드 특강] 개발 시작을 위하여 1. 작은 규모의 게임 간단하면서도 실행 가능한 아이디어를 고민. 게임의 로직이 동작하는 뼈대를 만들어놓고 거기에 살을 붙여 나가는 식으로 게임을 만들어라. 우리가 정해놓은 기준에서 60%까지 구현하고 남은 시간에 따라 추가 컨튼츠를 만들건지 고민. 2. 협업과 팀워크 부딫혀 보는 수 밖에 없다. 어떻게해서든 기능에 대한 업무적인 일정을 1순위로 맞춰야 한다. (완성도가 어떻게 되든) 3. 중요한 기능 우선순위 설정 기술을 쭉 나열해서 우리 게임에 들어간 주된 기술을 연구하는 시간(R&D)을 최소 일주일은 가져..
내일배움캠프 33일차 TIL 오늘 학습한 내용 [UI] 잡혀있는 앵커를 기준으로 트랜스폼의 좌표가 결정된다. 피벗 - 본인 오브젝트의 좌표를 결정한다. 앵커 프리셋에서 쉬프트를 누르면 피벗도 함께 위치가 바뀐다. 스트레치 - 값이 늘어나면 앵커를 기준으로 크기가 줄어든다. 부모의 크기가 변해도 자식 오브젝트도 거기에 맞춰 변한다. [컴퍼넌트] Content Size Fitter 입력한 텍스트의 길이에 따라 텍스트 오브젝트의 Width, Height가 수정된다. Veritical LayoutGroup 자식 오브젝트들의 좌표가 내가 레이아웃 설정한 것에 맞춰 고정된다. [데이터 저장] PlayerPrefs대신 스크립터블 오브젝트를 만들어서 인스펙터를 넣어 정보를 관리하는 방식으로 할 수 있지만 빌드를 해서 실행하면 스크립터블 오브젝트는..