기술 면접

Amberjack·2024년 3월 27일
0

기술면접

목록 보기
4/7
  1. float와 int의 표현 가능한 수의 범위가 다른 이유는 무엇인가요?

float와 int는 똑같이 4바이트 크기이기는 하나, float의 사용 목적이 부동 소수점을 표시하기 위함이므로 목적에 따라 int와 표현 가능한 수의 범위를 다르게 설정한 것 같습니다.

  1. 'ref'와 'out'의 사용 시 차이는 무엇인가요?

    ref와 out의 차이는 사용 목적의 차이인 것 같습니다. 둘다 어떤 변수를 참조 형태로 넘겨주기 위해 사용하나 ref의 경우 메서드 내에서 직접 ref 참조를 수정하여 return할 때 사용을 하고, out의 경우 메서드 내에서 얻은 결과를 out으로 초기화를 진행할 때 사용합니다.

  2. 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.

접근제한자는 어떠한 변수나 메서드에 접근을 제한하기 위해 사용하며, 크게 public, private, protected가 있습니다. public의 경우 접근에 제한을 두지 않는 경우로, 외부에서 직접 접근할 수 있습니다. private의 경우 해당하는 클래스 내에서만 접근이 가능하며, 외부에서는 직접 접근할 수 없습니다. protected의 경우 클래스와 해당 클래스를 상속 받는 자식 클래스에서만 접근을 가능케 해줍니다.

  1. struct와 class를 비교해서 설명해주세요.

    struct와 class의 가장 큰 차이는 메모리 할당 방식입니다. struct는 값 형식으로, 스택에 저장되나 class의 경우 참조 형식으로 힙 영역에 저장되게 됩니다.

  2. 가비지 컬렉터에 대해 설명해주세요.

    동적으로 할당한 메모리를 직접 해제하지 않고, 더 이상 사용이 되지 않을 경우 할당된 메모리를 알아서 해제 시켜주는 기능입니다. 프로그래머가 직접 해제하지 않기 때문에 메모리 관리가 편리하나, 자주 호출될 경우 프로그램 성능에 악영향을 끼칠 수 있습니다.

  3. 가비지 컬렉터를 회피하기 위한 전략은 무엇이 있나요?

    할당된 메모리를 직접 해제하는 방법과, 메모리를 할당할 때 최소한으로 생성하거나 재사용이 가능하게끔 생성하는 방법이 있습니다. 전자의 경우는 GC를 임의로 실행시키거나 Dispose과 같은 메서드를 활용하여 메모리 해제를 할 수 있으며, 후자의 경우 오브젝트 풀링과 같은 최적화 방법을 활용할 수 있습니다.

  4. 가비지 컬렉션이란 무엇인지 설명해주세요.

    메모리 관리 기법 중 하나로, 메모리에 할당된 객체가 더 이상 참조되지 않을 경우 해당 객체를 메모리에서 해제를 시켜주는 프로세스입니다. 이를 실행하는 주체가 가비지 컬렉터입니다.

  5. 박싱과 언박싱에 대하여 설명해주세요.

    박싱은 값 형식을 참조 형식으로 변환하는 것을 의미하며, 언박싱은 그 반대로 박싱된 참조 형식을 값 형식으로 다시 변환하는 것입니다.

    1. (꼬리질문) 박싱, 언박싱을 사용할 때 주의해야 할 점이 있다면 무엇이 있나요?
      성능적인 측면에서 오버헤드가 발생하게 됩니다. 박싱을 진행할 때 힙 메모리를 새로 할당하고 값을 복제하여 저장하기 때문에 오버헤드가 발생할 수 있으며, 언박싱의 경우에는 가비지 또한 발생할 수 있습니다.
  6. 배열과 List, ArrayList, Dictionary 의 차이점을 설명해주세요.

    배열은 일정한 데이터 타입을 저장하는 자료 구조이며, 배열의 크기는 사전에 할당한 크기에 맞춰 고정됩니다. 반면 List는 배열과 마찬가지로 일정한 데이터 타입을 저장하나, 크기를 동적으로 가변시킬 수 있다는 차이점이 있습니다. ArrayList의 경우는 List와 마찬가지로 크기가 가변적이나 일정한 데이터 타입 없이 여러 타입의 데이터를 넣을 수 있습니다. Dictionary의 경우는 크기가 가변적이고, Key-Value 형식으로 이루어져 있어 각각의 Value에 접근하기 위한 Key 값 또한 저장한다는 차이점이 있습니다.

    1. (꼬리질문) Dictionary는 어떻게 구현해야 하나요?
      Dictionay를 사용하기 위해서는 Dictionary 선언부에 제너릭으로 <Key, Value> 타입을 명시 해야 합니다. 이후 데이터를 추가할 때도 Key와 Value에 맞춰 데이터를 추가해야 합니다. 또한, Dictionary는 검색을 위해 Key값이 중복되지 않도록 되어 있기 때문에, Key값이 중복되지 않도록 유의해야 합니다.

    2. (꼬리질문) Dictionary 검색이 빠른 이유는 무엇인가요?
      Dictionary는 검색을 위한 Key값을 가지고 있기 때문에, Key 값을 통해 Value에 접근할 경우, 해당 Key값을 통해 바로 접근하면 되기 때문에 시간 복잡도가 항상 1이 됩니다.

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

    제네릭이란 파라미터 선언 시에 데이터 타입을 선언하지 않고 런타임 때 컴파일러로 인해 타입이 할당되는 방식으로, 코드 작성 시 어떤 데이터 타입이 들어갈 지 불분명할 때 사용할 수 있습니다.

  8. 델리게이트(Delegate)의 개념에 대해 설명해주세요.

  9. 'delegate', 'event', 'action', 'func' 간의 차이를 설명해주세요.

    1. (꼬리질문) 프로젝트에 적용해 본 경험이 있다면 설명해주세요.
  10. 람다식(Lambda Expression)이 무엇인지 설명해주세요.

  11. 콜백이란 무엇인가요? 사용해봤는지?

  12. 정렬 알고리즘이란 무엇이며, 사용 이유에 대해 설명해주세요.

  13. 선택 정렬과 버블 정렬에 대해 설명해주시고, 코드를 작성해보세요.

  14. 스택, 힙 메모리란 무엇이며 어떤 차이가 있는지 비교해서 설명해주세요.

  15. 값 형식과 참조 형식의 차이에 대해 설명해주세요.

  16. 자료구조의 종류는 무엇이 있으며 각각 어떤 차이점이 있는지 설명해주세요

    a. 위 자료구조는 무조건 좋은가요?

  17. 객체지향이란 무엇인지 설명해주세요.

    1. (꼬리질문) 객체지향의 특징은 무엇이 있나요?
    2. (꼬리질문) OOP란?
    3. (꼬리질문) SOLID 원칙은 무엇인가요?
  18. 상속이란 무엇인지 프로젝트 내에 적용해 본 부분과 함께 예를 들어 설명해주세요.

  19. 오버로딩과 오버라이딩의 차이점을 설명해주세요.

  20. 인터페이스와 추상클래스의 차이를 설명해주세요.

  21. 디자인 패턴(Singleton, Observer 등) 사용하는 이유는 무엇인가요?

    1. (꼬리질문) 프로젝트에 디자인패턴을 적용해 본 경험이 있나요? 왜 그 디자인패턴을 선택해서 구현하였나요?
    2. (꼬리질문) Unity를 사용하면서 경험해볼 수 있는 대표적인 디자인패턴이 무엇인지 설명해주세요.
  22. MVC 모델이란 무엇인지 설명해주세요.

  23. Unity 의 생명주기(Unity Life Cycle)에 대해서 설명해주세요.

  24. MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해 설명해주세요.

  25. Unity 오브젝트가 다양하게 씬에 올라와 있다면 동시에 시작되고 무엇이 먼저 초기화 되는지 알 수 없을 수 있는데, 프로젝트에서 코드를 만들 때 이에 대해 고민하고 해결해본 경험이 있다면 설명해주세요.

  26. Update의 종류와 각각 어떤 특징을 가지고 있는지 설명해주세요.

  27. 서로 다른 성능을 가진 기기에서 Update 사용 시 주의할 점에 대해 설명해주세요.

  28. 유니티로 타이머를 구현하는 알고리즘을 설명해주세요.

  29. Time.deltaTime이란 무엇이며, 사용하는 이유에 대해 설명해주세요.

  30. 유니티 렌더링 파이프라인에 대해 설명해보세요.

    1. 랜더링 파이프라인에는 어떤 종류가 있나요?
  31. 드로우콜(Draw Call) 배칭이 무엇인지 설명해주세요.

  32. 코루틴(Coroutine)이 무엇이며, 어떤 상황에서 유용하게 사용될 수 있나요?

    1. (연관질문) 코루틴을 사용한 경험에 대해 설명해주세요.
  33. 오브젝트 풀링(Object Pooling)이 무엇이며, 어떻게 구현하는지 설명해주세요.

  34. Object pool을 사용하는 이유는 무엇인가요?

  35. 객체를 이동할 때 벡터를 정규화(Nomarlized) 하는 이유에 대해 설명해주세요.

  36. 월드 스페이스(World Space)와 로컬 스페이스(Local Space)의 차이에 대해 설명해주세요.

  37. 컬링 종류와 사용하는 이유에 대해 설명해주세요.

  38. 유니티 최적화 기법은 어떤 것들이 있나요?

    1. 최적화를 해본 적이 있나요? 없다면 어떤 최적화가 있는지 설명해주세요.
    2. 최적화에서 가장 중요한 부분은 무엇인가요?
    3. 최적화를 위해서 적용해본 텍스쳐 포맷이 있나요?
  39. 가비지컬렉터(GC)란 무엇인가요?

  40. 어떤 에셋을 사용해 보셨나요? 없다면 알고 있는 에셋이 있나요?

  41. ScriptableObject이란 무엇이며 어떻게 사용되나요?

    1. ScriptableObject의 특징에 대해 설명해주세요.
  42. Unity에서 레이어와 태그의 역할은 무엇이며, 어떻게 사용되는지 설명해주세요.

  43. Find 함수 사용을 자제해야 하는 이유에 대해 설명해주세요.

  44. Scene Load의 종류를 비교해서 설명해주세요.

  45. Unity의 물리 엔진은 어떻게 동작하며, 어떤 요소를 조작할 수 있는지 설명해주세요.

  46. Texture 와 Sprite 에 대해 설명해주세요.

  47. 프리팹(Prefab)이란 무엇이며, 어떻게 사용되나요?

  48. 디버깅을 어떤 방식으로 진행하는지 설명해주세요.

  49. Attribute를 사용한 경험과 그에 대한 설명을 해주세요.

  50. git을 사용해 본적이 있나요? 어떤 점이 어려웠고 어떤 툴을 사용했는지 설명해주세요.

  51. 게임 개발 학습 과정에서 자신이 가장 재미있었던 부분이나 혹은 자신 있게 설명할 수 있는 부분이 있다면 설명해주세요.

  52. 포트폴리오에서 본인이 담당한 부분이 무엇인가요?

  53. 만약 본인이 개발한 것을 다시 개발한다면, 어떻게 개선할 것인지 설명해주세요.

  54. 협업하면서 가장 어려웠던 점이 무엇인가요?

    1. 구현 하면서 기술적으로 어려웠던 부분을 어떻게 해결하였나요?
  55. 프로젝트를 진행하면서 기술적인 도전과제는 무엇이었나요?

  56. 협업하면서 조원과 트러블이 있었는지?
    어떻게 해결해 나갔는지

  57. Git Repository를 팀원들과 공동으로 작업하면서 발생했던 문제점이 있다면 무엇인지, 어떻게 해결하였는지 이야기해주세요.

0개의 댓글