본문 바로가기

[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL

12월 11일 수요일 본 캠프 개발 일지

📌

 

학습 내용 


1. 기술면접 공부  


그냥 아는대로 쭉 적어보기. 

 

  1. 객체란 무엇인가요? 클래스와 어떤 연관이 있나요? 객체는 클래스를 통해 생성한 인스턴스이다. 객체 안에는 기능과 속성이 존재하고 이 기능과 속성은 클래스 내부에서 메서드랑 변수로 정의되고 있다. 쉽게 말해서 클래스는 설계도라고 할 수 있고 객체는 이 설계도를 통해 만든 실체화 된 물체라고 볼 수 있다 .
  2. 생성자에 대해 간단하게 설명해주세요. 객체를 초기화 할 때 호출되는 메서드이다. 메서드명이 클래스명과 같고 반환 타입이 없다는 게 특징이다. 이 생성자 메서드는 new 키워드를 통해 실제로 생성이 된다. 
  3. 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요. 타입(클래스)과 타입 멤버(변수)를 선언할 때 외부로부터 접근할 수 있는 정도를 설정할 수 있는 키워드이다. 가장 자주 쓰이는 private, public, protected를 비교하자면, private는 클래스 내부에서만 사용이 가능하고, public은 모든 외부에서 접근이 가능하고, protected는 상속을 받은 자식 클래스에서만 접근이 가능하다.  
  4. static 한정자에 대해 설명해주세요. 타입 맴버를 선언할 때 사용되는 한정자로, 스태틱으로 선언된 타입 맴버는 클래스에서 딱 하나만 존재하게 된다. 이때의 인스턴스는 모든 외부에서 객체 생성 없이 클래스명으로만 접근이 가능해 싱글톤 패턴을 사용할 때 자주 쓰이게 된다.  단, 스태틱으로 만든 인스턴스는 프로그램이 실행할 때부터 종료될 때까지 그 메모리를 가지고 있기 때문에 메모리 효율이 좋지 않다는 단점이 있다. 
  5. SOLID 원칙에 대해 설명해주세요. 객체지향 프로그래밍을 할 때 중요시 되는 5가지 원칙의 약자를 써서 솔리드 원칙이라고 부른다. [1] 단일 책임 원칙 : 하나의 클래스는 하나의 책임만 가져야 한다. [2] 개방 폐쇄 원칙 : 확장에는 열려 있어야 하고 코드 변경은 닫혀있어야 한다. [3] 리스코프 치환 원칙 : 자식 클래스는 부모 클래스를 기능을 완벽하게 따름으로써 만약 부모 클래스의 인스턴스가 아닌 자식 클래스의 인스턴스를 사용해도 시스템의 제대로 작동해야 한다. (언제나 교체될 수 있는 상태여야 한다.)  [4] 인터페이스 분리 원칙 : 하나의 인터페이스 보다 여러 개의 구체적인 인터페이스를 구현해야 한다. [5] 의존성 역전 원칙 : 구체적인 클래스보다 인터페이스나 추상 클래스에 의존해야 한다. 그래서 모듈 간의 결합도가 낮아진다. 
  6. 객체지향 프로그래밍의 속성 중 하나인 다형성과 이를 활용한 설계의 장점에 대해 설명해주세요. 만약 다른 타입의 두 가지 객체가 하나의 큰 분류로 묶일 때, 인터페이스나 추상 클래스 등을 사용해서 동일한 메서드를 각각 다른 동작으로 작동할 수 있게 하는 설계이다. 다형성을 활용할 경우 코드의 중복을 줄일 수 있다. 
  7. override와 overload에 대해 설명해주세요. override는 부모 클래스를 상속 받은 자식 클래스에서 부모 클래스에서 정의한 메서드를 재정의 해서 사용하는 것이다. 이때 virtual로 선언된 메서드만 override할 수 있는 게 특징이다. overload는 동일한 메서드명을 가진 메서드를 여러 개 만들어 사용하는 방식으로 매개변수를 필수로 가져야 하는 건 아니지만 매개변수의 유무나, 매개변수의 타입, 종류 등으로 메서드 간의 차이를 만들어야 한다. 
  8. 확장 메서드에 대해 설명하고 어떻게 활용했는지 알려주세요. 잘 모름 
  9. 콜백이란 무엇인가요? 콜백을 사용해본 경험이 있을까요? 메서드를 바로 호출하는 게 아니라 대리자가 가지고 있다가 특정 시점에서 호출해주는 형식을 의미한다. 다이얼로그 메세지를 챕터별로 순회하면서 챕터에 진입하고 빠졌을 때 발생하는 UI 이벤트를 호출할 때 콜백을 사용해보았다.   
  10. 델리게이트(delegate; 대리자)란 무엇인가요? 그러니까 변수처럼 메서드를 쓰려고 사용하는데, 델리게이트를 선언하고 델리게이트로 호출할 메서드를 델리게이트의 반환타입 및 매개변수로 맞춰서 정의해준 다음에 직점 그 메서드를 호출하는 게 아니라 델리게이트 그 메서드를 호출해주는 거임. 그래서 대리자라고 불리는 거임. + 인스턴스가 아니라 타입이기 때문에 객체를 만들어서쓰는 거임. 
  11. C#의 event란 무엇인가요? 델리게이트를 기반으로 한 객체인데요. 델리게이트가 타입인 반면 이벤트는 이 델리게이트 타입을 사용해서 객체로 만들어서 저장하고 있습니다. 그래서 객체를 생성할 필요 없이 호출할 시점만 정해주면 되는데 이벤트는 이벤트를 선언한 클래스에서만 호출이 가능해서 접근이 제한된다는 특징이 있습니다.  
  12. Unity에서 사용하는 델리게이트 혹은 이벤트에는 어떤 것이 있나요? Inspector에서 이벤트를 연결하여 사용할 수 있는 유니티 내장 이벤트가 존재한다. 델리게이트 타입에는 Action, Action<T>, Func< T, TResult >가 존재하고, 액션은 반환값이 없고 매개변수를 필요로 하지 않고, 액션<T>는 매개변수만 존재하며, 펑션은 매개변수와 반환값이 둘 다 존재하는 델리게이트 타입이다.
  13. 참조 형식과 값 형식에 대해 설명해주세요. 참조 형식은 이미 존재하는 데이터의 메모리 주소를 참조해서 사용하는 것이다. 이를 통해서 메모리 주소에 있는 실제 데이터에 접근이 가능하다. 값 형식은 변수에 데이터를 직접 넣어서 사용하는 것처럼 자기 자신이 실제 값을 가지고 있는 것을 말한다
  14. 메모리에서 스택과 힙의 차이점에 대해 설명해주세요. 메모리 공간은 코드 영역 > 데이터 영역 > 스택 영역 > 힙 순으로 저장이 된다. 스택 영역은 함수 호출과 관계되는 지역 변수와 매개 변수가 저장되고, 함수의 호출과 함께 할당된다. 선입선출의 방식에 따라 동작하게 된다. 변수가 차곡차곡 쌓이는 스택과 달리 힙영역은 임의의 객체가 생성이 된다. 객체를 선언하면 항상 힙 메모리 영역에 생성이 되고 이러한 객체에 대한 참조 정보는 스택 메모리에 저장이 된다. 결론 : 스택은 메모리 할당과 할당 해제가 자동으로 수행되지만 힙은 수동으로 메모리를 할당하고 해제해야 한다. 그래서 스택 메모리가 더 빠르다. 
  15. 1번과 2번 질문의 답안을 기반으로 struct와 class의 차이점에 대해 설명해주세요. class는 어떤 기능을 하는 객체를 만들기 위해 작동하고, struct은 단순한 데이터를 모아두는 집합체처럼 보통 사용이 된다. 클래스는 상속, 다향성 및 캡슐화 같은 객체 지향 기능을 더 잘 제공하고 있다. 

 

아아 확장 메서드가 .. 이해가 않되