C# Unity 면접 대비 CS 정리

삐얅·2024년 8월 5일
0

CS

목록 보기
2/3

1. 메모리 관리

1. C#에서의 메모리 할당, 해제

C#에서의 메모리 할당과 해제는 주로 가비지컬렉터에 의해 자동으로 처리된다.

가비지 컬렉터

가비지 컬렉터는 더이상 사용되지 않는 객체를 자동으로 해제하는 기능을 말한다.
* 힙에 메모리 할당
* 참조되지 않는 객체 감지
* 해당 객체 메모리 해제

가비지 컬렉터의 장점과 단점

장점

  • 가비지 컬렉터는 메모리를 자동으로 관리해 메모리 누수와 같은 문제를 줄일 수 있다.
  • 메모리 접근 오류나 해제로 인한 버그를 방지할 수 있다.
  • 메모리 관리에 들어가는 인력이 줄어 생산성을 높이는데 도움이 된다.
  • 모든 객체는 가비지컬렉터의 관리 하에 있어 일관성을 보장한다.
  • 주기적으로 메모리를 검사하고 미사용인 객체의 메모리를 해제해 최적화에 유리하다.

단점

  • 가비지컬렉터가 언제 실행되는지 예측하기 어렵다.
  • 추가적인 메모리를 사용해 메모리의 여유 공간이 필요하다.
  • 참조가 복잡해지면 이를 처리하는데 오래걸릴 수 있고 의도치 않은 객체가 남아있을 수 있다.
  • 메모리 누수를 찾기 어렵다.

가비지컬렉터의 세대

가비지컬렉터는 세 개의 세대로 나뉜다.

  • 0세대 : 최근에 할당된 객체, 가장 자주 수집된다.
  • 1세대 : 0세대에서 살아남은 객체
  • 2세대 : 장기적으로 남아있는 객채, 가장 덜 수집된다.

객체가 오래 남아있을 수록 더 높은 세대로 이동한다.

가비지컬렉터는 위와 같이 세대로 나누어 수집해는데 이는 생명주기의 특성을 활용하기에 유용하다. 생명주기가 짧은 객체들만 신속하게 수집하고 그렇지 않은 객체들은 적은 빈도로 수집해 시스템에 끼치는 영향을 감소시킬 수 있다.

가비지 컬렉터를 효율적으로 관리하기

  1. 객체 생성 최소화
    객체를 자주 생성하고 파괴하면 리소스를 많이 잡아먹게 된다. 이를 방지하기 위해 주로 오브젝트풀 패턴을 활용해 생성과 파괴에 들어가는 리소스를 최소화한다.

  2. 큰 객체 할당 피하기
    한번에 큰 메모리 블록을 할당하는 것은 부하를 줄수 있어 여러개의 작은 객체로 나누거나, 최소화 하는게 유리하다.

  3. 할당 패턴 최적화
    작은 객체들을 일관되게 할당 및 해제하면 효율적으로 작동한다. 동적 배열을 가지는 List를 사용할 때는 예측 가능한 크기로 사전에 설정해 두는것이 유리하다.

박싱/언박싱

  1. 박싱
    박싱은 값 형식을 참조 형식으로 변환하는 과정으로 값 형식을 담을 수 있는 새 객체를 힙에 할당 후 힙에 할당된 객체로 복사된다.

  2. 언박싱
    언박싱은 참조 형식이 실제로 값을 가지고 있는지 확인 후 힙에 있는 객체의 값을 스택 영역으로 복사한다.

2. 라이프사이클

Update와 FixedUpdate의 차이

Update는 매 프레임마다 호출되고 프레임에 따라 호출빈도가 바뀔 수 있지만 FixedUpdate는 물리엔진을 시뮬레이션 한 이후 고정된 간격으로 호출되며 호출빈도가 일정하다는 차이가 있다.

timeScale의 값에 따른 Update, FixedUpdate 호출 빈도

timeScale이0이 되면 Update메서드는 계속 호출되지만 시간 기반의 계산이 영향을 받는다.
FixedUpdate는 물리 엔진 업데이트를 위한 것으로 timeScale이 0이 되어도 호출되지만 물리 계산이 정상적으로 수행되지 않을 수 있다. 일정한 간격으로 호출되지만 물리 계산이 실제로 진행되지 않는다.

반대로 timeScale의 값을 늘려도 두 메서드의 호출 빈도는 변하지 않으며 시간 기반이나 물리 계산 부분에서는 영향을 받는다.

Awake, Start, OnEnable의 차이

Awake는 객체 생성 시 가장 먼저 호출되며 활성화 될 때 자동으로 실행되고, 비활성화 이후 다시 활성화 해도 다시 실행되며 다른 스크립트의 초기화에 영향을 받지 않는다.
Start는 Awake 이후 호출되며 첫 프레임 업데이트 전에 한 번 호출된다.
OnEnable은 객체가 활성화 될 때마다 실행되며 Start보다먼저 실행된다.

0개의 댓글

관련 채용 정보