본문 바로가기

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

12월 22일 일요일 본 캠프 개발 일지

  1. 얕은 복사와 깊은 복사의 차이점은 무엇인가요? 얕은 복사는 객체의 참조를 복사하는 것이다. 얕은 복사로 복사된 객체는 원본 객체와 일부 데이터(참조 형식 데이터)를 공유한다. 깊은 복사는 객체의 데이터를 새로운 메모리에 복사하는 것이다. 값 형식뿐만 아니라 참조 형식 데이터도 새로운 복사복을 만들기 때문에 원본과 복사본이 독립적인 상태가 된다. 
    쉬운 설명 : 우리가 데이터를 만들기 위해서는 데이터를 저장할 주소가 필요하다. 만약 A = 6 이라는 데이터가 있다고 했을 때, A는 6이라는 데이터가 들어간 주소값이 된다. 여기서 얕은 복사는 객체를 복사해서 똑같은 A라는 주소값을 사용하게 되는 것이고(같은 집 공유, 그래서 하나를 변경하면 서로 영향 주고 받음), 깊은 복사는 A-1라는 새로운 주소값을 만들어서 사용하게 되는 것(새 집 만들어서 거기 데이터 복사)이다. 
  2. 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요. 박싱은 값 형식 데이터를 참조 형식으로 변환하는 과정이다. 값 형식 데이터가 힙 메모리에 새로운 객체로 저장되면서 이 객체의 주소(참조)가 생성된다. 그러니까 힙 메모리에 해당 값 형식 데이터의 복사본이 만들어지고, 힙에 저장된 객체의 주소는 스택에 저장된다. 언박싱은 참조 형식 데이터를 다시 값 형식으로 변환하는는 과정이다. 힙 메모리에 있던 값 형식 데이터를 스택 메모리로 복사하게 된다. 
  3. 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요? 클래스는 : 기호를 통해 상속을 받을 수 있다. 기본 클래스를 파생 클래스가 상속받으면, 기본 클래스의 멤버를 사용할 수 있다. 
  4. 클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요. 다이아몬드 문제는 다중 상속에서 발생할 수 있는 충돌 문제를 말한다. 이는 한 클래스가 여러 부모 클래스를 상속받고, 이 부모들이 공통의 조상을 가질 때 발생한다.
    쉬운 설명 : 기본 클래스를 A, B가 상속받고 이 A, B 클래스를 C가 상속받으면 어떤 클래스를 통해 기본 클래스에 접근해야 할지 알 수 없게 된다. 
    다중 상속 대신 인터페이스를 사용하여 해결이 가능하다. (기본 클래스를 인터페이스로 만들고, A와 B 중 하나의 클래스만 상속받으면 된다.)
  5. 인터페이스란 무엇인가요? 인터페이스(Interface)는 서로 다른 객체가 공통적인 기능을 가져야 할 때, 추상화를 하기 위해 사용하는 설계 방식 중 하나이다. 인터페이스 자체에는 구현이 없고, 오직 멤버들의 선언(시그니처)만 포함됩니다. 
  6. 인터페이스와 추상클래스의 차이는 무엇인가요? 인터페이스는 하나의 클래스에서 여러 개의 인터페이스를 상속 받을 수 있고 상속 받은 자식 클래스에게 모든 멤버의 구현을 강제한다. 반면 추상 클래스는 단일 상속만 가능하며 일반 메서드와 추상 메서드를 별도로 분리해서 만들 수 있다. 자식 클래스는 추상 메서드만의 구현이 강제된다. 
  7. 가비지 컬렉터란 무엇인가요? 가비지 컬렉터(Garbage Collector, GC)는 .NET과 같은 관리형 언어(C#, Java 등)에서 메모리 관리를 자동으로 처리하는 시스템이다. GC는 더 이상 사용되지 않는 객체(즉, 접근할 수 없는 메모리)를 탐지하고 회수하여, 개발자가 명시적으로 메모리를 해제하지 않아도 되도록 한다.
  8. 가비지 컬렉터의 장점과 단점에 대해 설명해주세요.
  9. 가비지 컬렉터의 세대 개념에 대해 설명해주세요.
    // 가비지 컬렉터 진짜 처음 듣는데 이건 유튜브 봐야 할 듯? 
  10. 박싱, 언박싱을 사용할 때 주의해야 할 점은 무엇일까요?
  11. 오브젝트 풀을 사용하면 메모리 관리에 도움이 되는 이유가 무엇일까요?
  12. 제네릭이란 무엇인가요? 메서드나 클래스를 작성할 때 데이터 형식을 지정하지 않고 실제 사용하는 시점에서 데이터 형식을 지정할 수 있도록 하는 기능으로 <T> 이렇게 생겼다. (ex. 싱글톤, GetComponent)  
  13. 람다식(Lambda Expression)이 무엇인지 설명해주세요. 이름이 없는 익명 함수로 별도의 메서드를 정의하지 않고도 함수를 사용할 수 있게 해준다. (=>) 
  14. LINQ란 무엇인가요? 데이터를 질의하고 조작하기 위해 일관되고, 직관된 문법 
  15. 리플렉션(Reflection)이 뭔지, 사용을 해봤다면 어떤 이유에서 사용했는지 설명해주세요. 

 내일 8시에 꼭 일어나서 나머지를 채웁시다.