개발 TIL

7/24 부트캠프 개발 TIL (기술 모의 면접 5)

HJTL 2024. 8. 8. 20:26

22. 가비지 컬렉터란 무엇인가요?

가비지 컬렉터는 CLR의 메모리 관리 소프트웨어로, 할당할 힙 메모리 공간이 부족할 때, 가비지 컬렉터가 힙 메모리를 돌며 사용하지 않는 메모리를 회수합니다. 특히 객체지향 프로그래밍에서 생성자와 소멸자를 호출할 때 발생합니다.

23. 가비지 컬렉터의 장점과 단점에 대해 설명해주세요.

장점은 클래스의 소멸자를 호출하지 않아도 종료할 때 알아서 해제시켜줍니다.

단점으로 이를 많이 사용하면 프로그램 성능저하, 힙 메모리가 부족하면 예측하기 어려운 것이 있습니다.

24. 가비지 컬렉터의 세대 개념에 대해 설명해주세요.

CLR은 메모리 구역을 나누어 메모리에서 빨리 해제될 객체와 오래도록 살아남을 것 같은 객체들을 구분합니다. 

  • 0세대는 가비지 컬렉터를 한 번도 겪지 않은 객체들이 위치한다. 주로, 단명 객체들이 많아 가비지 컬렉터가 자주 발생한다.
  • 1세대에는 0세대를 통과하고 살아남은 객체들이 위치한다. 이 세대는 객체들이 조금 더 오래 생존할 가능성이 높다.
  • 2세대에는 가비지 컬렉션을 여러 번 겪고도 살아남은 오래된 객체들이 위치한다. 이 세대에서 가비지 컬렉션은 가장 드물게 발생한다.

25. 박싱, 언박싱을 사용할 때 주의해야 할 점은 무엇일까요?

박싱, 언박싱을 하는 과정에서 데이터를 메모리의 다른 위치로 이동시키는데, 이때 추가적인 메모리 할당 및 해제 과정에서 힙에 쓰레기 메모리가 쌓여 GC에 부하를 줄 수 있습니다.

26. 오브젝트 풀을 사용하면 메모리 관리에 도움이 되는 이유가 무엇일까요?

오브젝트 풀은 객체를 미리 생성하고 사용할때 활성화시켜 사용하고 사용 이후에는 비활성화로 되돌려놓는 방식입니다.

오브젝트 풀을 사용하는 이유는 객체를 생성 및 파괴를 반복하게 되면 가비지 컬렉터가 쌓여 성능에 이상이 생기는 것을 방지하기 위해 사용하고 있습니다. 그러나 한계는 오브젝트 풀 사이즈를 한계치보다 넘게 사용하면 그 이상의 수량 오브젝트를 사용을 할 수 없습니다.

27. 제네릭이란 무엇인가요?

데이터 형식을 일반화하여 코드의 재사용성과 유연성을 향상시켜 주는 기능입니다. 다양한 형식에 대응되는 메서드와 클래스 작성에 용이하며 컴파일 시 안정성을 보장합니다.

28. 람다식(Lambda Expression)이 무엇인지 설명해주세요.

무명함수를 만들기 위해서 사용하며 간결하고 가독성이 높은 코드 작성에 (매개변수목록) => 식 의 형태로 사용합니.

29. LINQ란 무엇인가요?

Language Integrated Query 라고해서 특정 데이터들에서 Query를 하여 데이터를 빠르고 편리하게 추출하는 방식이라 할 수 있다. 컬렉션 형태를 띄는 모든 데이터에 질의를 할 수 있으며, 이 강력한 기능을 통해 복잡한 구문을 좀 더 간단하게 필터링하거나 정렬할 수 있다는 등의 특징을 지니고 있습니다. 가독성 면에서 뛰어나지만, 유니티에서 활용할 때에는 오히려 처리 속도가 저하된다. (.Net7 버전부터는 빠르지만 유니티에서 지원하지 않음)

30. 리플렉션(Reflection)이 뭔지, 사용을 해봤다면 어떤 이유에서 사용했는지 설명해주세요.

클래스 타입, 메서드, 프로퍼티 등의 메타 정보를 런타임 중에 알아내는 기능. 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메소드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공한다. 유니티 Event 처리 방식 중 Send Message, Broadcast Message 등이 이를 활용한 기능이며, 이벤트 발생 시의 처리를 위해서 사용하였다. 그러나, Reflection은 객체 지향에서 중요하게 생각하는 캡슐화를 망가뜨리는 방식이다. (private으로 선언된 멤버에도 접근할 수 있다.) 추가로 문자열 검색을 모든 내용에 대해 수행하므로 속도가 느리며 성능 저하를 유발한다.