블로그에 있는 클라이언트 면접 질문리스트 답변하기 1

2022. 11. 23. 18:03게임 클라이언트 기술면접 질문들

기술면접에 대해 구글링을 하다보면 블로그마다 기술면접에서 물어보았던 질문들을 작성해 놓는다.

나는 이것을 찾아보면서 QnA형식으로 답변을 작성 할려고한다.(답변은 최대한 줄일 수 있게 노력해보자)

제가 틀린 부분도 있을 수 있으니 다른 곳과 비교해 보며 참고하세요

 

질문을 가져온 곳 https://cho22.tistory.com/59

 

1. virtual, abstract, interface에 대해 설명해봐라.

잘 정리된 글 https://kangworld.tistory.com/186

Virtual

  • virtual의 가장 큰 특징은 선택적인 재정의(override)가 가능하는 것이다.
  • virtual이 붙은 메서드와 속성, 인덱서는 재정의할 수 있지만 필수는 아니며 virtual 키워드가 포함된 클래스는 그 자체로도 완벽한 기능을 제공한다.

abstaract

  • 클래스 내부에서 abstract를 사용하려면 클래스 정의부에 abstract 키워드를 붙여줘야 한다.
  • abstract 키워드가 붙으면 그 자체로는 불완전해서 파생 클래스에서 반드시 재정의 해야 한다.
    • 단, abstract 클래스 내부에 일반 메서드와 일반 멤버 변수를 정의할 수 있다
  • abstract 키워드는 인스턴스화할 수 없다.

Interface

  • interface는 가장 높은 추상성을 제공한다.
    • 필드로 메서드, 프로퍼티 인덱서만 가질 수 있으며 abstract가 아닌 필드는 정의할 수 없다.
    • 접근 제한자를 사용할 수 없으며 모든 필드는 public이 적용된다.
  • abstract와 interface의 가장 큰 차이는 interface는 다중 상속이 가능하다.
  • interface는 상속의 개념보단 기능을 확장하는 개념이다.
    • 서로 관계가 없는 클래스도 동일한 interface를 구현할 수 있다.
    • 서로 관계가 없는 클래스도 interface를 구현함으로써 관계가 형성되는데 이는 다형성으로 연결된다.

 

위에서 나오는 indexer(Indexer)란 무엇일까?  아래 링크에 잘 정리되어 있다.

인덱서(Indexers)는 클래스의 멤버로 클래스의 값을 배열처럼 접근할 수 있도록 해주는 문법이다.

https://developer-talk.tistory.com/323

 

2. 코루틴에 대해 설명해봐라.

https://docs.unity3d.com/kr/2018.4/Manual/Coroutines.html

https://blog.naver.com/dj3630/221459387675

https://eunjin3786.tistory.com/515

 

코루틴이란? 어떠한 작업을 처리할 때 필요에 따라시간 간격을 두고 작업을 처리할 수 있도록 도와주는 함수

코루틴은 반환 타입이 IEnumerator 이고 body 어딘가에 yield return 를 포함해야한다.

 

3. 코루틴과 invoke의 차이에 대해 설명해봐라. 

https://mentum.tistory.com/489

https://chameleonstudio.tistory.com/37

https://coding-of-today.tistory.com/137

 

둘 다 시간을 지연시키는 기능을 한다. 하지만 차이점으론

unity에서 Gameobject가 off 상태에선 코루틴은 작동하지 않지만 , 인보크는 작동한다.

인보크는 지연시간 외의 파라미터를 받지 않지만 코루틴은 여러 인자를 받을 수 있다.

 

4. 모바일 게임은 저사양 기기에서 돌아가는것도 중요한데 최적화를 위해 했었던 일들에 대해 설명해봐라. 

https://blog.unity.com/kr/technology/optimize-your-mobile-game-performance-expert-tips-on-graphics-and-assets

위에 글 참고하기

나는 오브젝트 풀을 제외하곤 사용해본것이 없다.

 

5. 프로세스와 스레드에 대해 설명해봐라 .

https://brunch.co.kr/@kd4/3

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

프로세스는 운영체제로부터 자원을 할당받은 작업의 단위이고

스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위.

 

7. 스레드와 코루틴의 차이를 설명해봐라.

https://angangmoddi.tistory.com/224

https://velog.io/@haero_kim/Thread-vs-Coroutine-%EB%B9%84%EA%B5%90%ED%95%B4%EB%B3%B4%EA%B8%B0

8. C# 과 C++의 가장큰 차이는 뭔가.

내가 생각할 때 가장 큰 차이는 역시 GC(갈비지 컬렉터)인 것 같다.

c/c++은 메모리를 사용자가 할당 및 해제를 직접해줘야하는데 반해 

C#은 GC가 메모리의 해제를 담당해준다.

메모리의 관리하는 차이로 인해 속도에서 차이가 난다.

그외에도 검색하면 엄청많다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=io044&logNo=220070411535

 

9. GC에 대해 설명해봐라. 

9.1 세대별 GC 

9.2GC최적화를 위해 할수있는일은 무엇이 있을지 설명해봐라.

9.3 GC의 장점과 단점에 대해 설명해봐라. 

https://luv-n-interest.tistory.com/922

https://velog.io/@devseunggwan/C-Garbage-Collection-GC-%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%9E%99%EC%85%98

https://velog.io/@livelyjuseok/C-GC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%84%EB%9E%B5-%EC%84%A4%EB%AA%85LOH-SOH%EB%9E%80

https://velog.io/@devseunggwan/C-Garbage-Collection-GC-%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%9E%99%EC%85%98

GC란 메모리 관리 기법중의 하나로 , 프로그램이 동적으로 할당했던 메모리 영역 중에서

필요없게 된 영역을 해제하는 기능이다.

 

12.박싱 언박싱

https://yeko90.tistory.com/entry/c-%EB%B0%95%EC%8B%B1-%EC%96%B8%EB%B0%95%EC%8B%B1-%EA%B0%9C%EB%85%90

 

13.delegate 와 event

https://geukggom.tistory.com/210

 

 

C#의 컬렉션 (리스트-큐-스택-해시테이블-딕셔너리-arraylist)

https://hong-825.tistory.com/entry/C-%EC%BB%AC%EB%A0%89%EC%85%98-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%ED%81%90-%EC%8A%A4%ED%83%9D-%ED%95%B4%EC%8B%9C%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC-arraylist

 

C# CLR(공통 언어 런타임) , CIL(공통 중간언어)

https://guslabview.tistory.com/185