TIL

[TIL] 내일배움캠프_Unity 최종 프로젝트 2주차: 주요 메카닉 구현 4 , 기술 면접 대비 10일차

Hwone 2023. 11. 2. 19:33

2주차 : 주요 메카닉 구현

팀 회의 내용

-진행상황 공유

구현한 내용 

- 정렬 기능 완성 (가격순->오름,내림)

- 리팩토링 

 

4일차에 주요 기능들은 완료를 한 상황이고 데이터 저장 방식을 좀 더 효율적으로 관리하기 위해 변경된 방식으로 리팩토링을 진행하였다 내일은 다른 UI 작업한 팀원분이랑 연결까지 하고 UI 디자인까지 하면 내가 맡은 주요 메카닉은 완료 !

 

기술면접 10일차

Q : 제네릭이란 무엇인가요 ? 
A : 데이터 형식을 일반화하여 다양한 형식의 데이터를 처리하는 메서드나 클래스 등을 작성할 수 있는 기능으로 재사용성과 유연성을 향상시켜주고 컴파일 시점에서 결정되기 때문에 안정성이 보장됩니다 

(꼬리질문) 제네릭은 언제 사용하나요?
:여러 데이터 형식에 대해 동일한 로직을 적용해야할 때, 컬렉션 타입에서 다양한 데이터 형식을 저장하고 관리해야할 때 등 사용할 수 있고 주로 Singleton 패턴에서 여러 클래스가 상속을 받아 사용해야 할 때 적용 했었습니다 

(꼬리질문) 제네릭의 제약 조건에 대해 설명해주세요 
: 클래스나 메서드가 특정 동작을 수행하거나 특정 타입에 대한 조작을 할 수 있도록 제약을 걸어주고 Where 키워드를 사용합니다   

 

* 기술 면접 롤플레잉을 통해 피드백 받은 내용 

 - 배열과 list의 차이점은 동적할당(힙 메모리를 할당하는 작업)이라는 말 보다는 동적 배열로 사용하는 추천 
- 배열과 List의 성능적 차이 
: List는 동적으로 크기를 할당하므로 배열보다 많은 메모리를 차지하고, 배열에 비해 데이터 접근 시간이 느리며, 데이터 추가, 삭제 등의 작업이 배열보다 간편하지만, 코드의 가독성과 유지보수성이 저하될 수 있다 
 
- Dictionary의 구현방법의 핵심 키워드는 해시테이블, 버킷, 슬롯이다 
- Dictionary의 단점은 연속적이지 않은 구조를 가지고 있어서 반복문 사용에 적합하지 않고, Unity 인스펙터 창과 호환되지 않는다 
- c#의 가비지 컬렉터를 c/c++과 비교했을 때의 장점 
: C/C++에서는 프로그래머가 가비지 컬렉션 기능을 수행해야 한다 new 나 malloc을 사용하여 동적으로 메모리를 할당한 객체는 꼭 delete와 free로 해제해주어야 한다 이 과정에서 메모리의 단편화 현상이 발생할 수 있는데, C#의 가비지 컬렉터에서는 가비지 컬렉션 이후 자동으로 메모리 컴팩션을 수행하여 메모리 단편화 현상을 방지한다 
 
* 메모리 단편화: RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태 
  메모리 컴팩션: 프로세스가 종료된 자리에 생겨난 가용공간을 없애기 위해서 적재된 프로세스들을 한쪽으로 몰고 가용 공간들을 다른 한쪽으로 모아서 하나의 큰 가용 공간으로 만드는 것