내일배움캠프 60일차 TIL : 면접 질문 준비 13~19

woollim·2024년 12월 17일
0

내일배움캠프TIL

목록 보기
53/65
post-thumbnail

■ 개요

○ 오늘 계획

  • 보물상자
    • 비석 모델링 찾아서 적용하기
    • 이동하면 보물상자UI닫기
    • 보물상자 열기 누르면 무기 획득
    • 명성 소수점 안나오게
  • 스테이지
    • 스테이지 매니저 리팩토링(스테이지 구현방식변경)
    • 스테이지씬으로 무조건적 이동이 아닌 몬스터에 맞는 씬이동법 구상
    • 쉘터 이동도 선택으로 되게끔
  • 게임매니저 리팩토링
  • 씬로드 한번만하게 제한


■ 면접 질문 준비 2

13. 참조 형식과 값 형식에 대해 설명해주세요.

  • 참조 형식과 값 형식은 데이터 저장 방식과 메모리 사용에 차이가 있습니다.

  • 값 형식

    • 변수가 값을 직접 저장합니다.
    • 값 형식은 주로 스택(Stack) 메모리에 할당됩니다.
    • 데이터를 복사하면 실제 값이 복제되므로, 복사본과 원본은 독립적으로 작동합니다.
    • 예시: int, float, struct
  • 참조 형식

    • 변수가 데이터의 참조(주소)를 저장합니다.
    • 참조 형식은 힙(Heap) 메모리에 할당되며, 변수가 실제 데이터를 참조합니다.
    • 데이터를 복사하면 주소만 복사되므로 원본과 복사본이 같은 데이터를 가리킵니다.
    • 예시: class, string, object, array

14. 메모리에서 스택과 힙의 차이점에 대해 설명해주세요.

  • 스택 (Stack)

    • 메모리에서 임시 데이터를 저장합니다.
    • 값 형식 데이터가 주로 저장됩니다.
    • LIFO (Last In, First Out) 방식으로 데이터가 관리됩니다.
    • 빠르게 할당 및 해제됩니다.
    • 크기가 비교적 작으며, 컴파일 시 크기가 정해집니다.
    • 예시: 메서드 호출 시 로컬 변수, 함수 호출 스택
  • 힙 (Heap)

    • 메모리에서 동적 데이터를 저장합니다.
    • 참조 형식 데이터가 저장되며, 메모리의 주소를 통해 접근합니다.
    • 필요에 따라 메모리를 할당하고 해제하므로 느립니다.
    • 크기가 상대적으로 크고, 런타임에 관리됩니다.
    • 예시: new 키워드로 생성된 객체

15. struct와 class의 차이점에 대해 설명해주세요.

  • 1번 (참조 형식과 값 형식)과 2번 (스택과 힙)의 개념을 기반으로 structclass의 차이점을 정리하면:

  • struct (구조체)

    • 값 형식입니다.
    • 스택 메모리에 할당됩니다.
    • 복사 시 값이 복제되므로 독립적인 사본을 가집니다.
    • 상속을 지원하지 않습니다.
    • 가벼운 데이터 구조에 적합합니다.
  • class (클래스)

    • 참조 형식입니다.
    • 힙 메모리에 할당됩니다.
    • 복사 시 주소만 복사되므로 원본과 복사본이 동일한 데이터를 참조합니다.
    • 상속을 지원합니다.
    • 복잡한 데이터 구조나 객체 지향 프로그래밍에 사용됩니다.

16. 얕은 복사와 깊은 복사의 차이점은 무엇인가요?

  • 얕은 복사 (Shallow Copy)

    • 객체의 주소만 복사합니다.
    • 복사된 객체는 원본 객체와 같은 메모리를 참조합니다.
    • 원본 데이터가 변경되면 복사본도 영향을 받습니다.
    • 예시: MemberwiseClone 메서드
  • 깊은 복사 (Deep Copy)

    • 객체의 내용 전체를 복사하여 새로운 메모리 공간에 할당합니다.
    • 복사된 객체는 원본과 독립적으로 동작합니다.
    • 원본이 변경되어도 복사본에 영향을 미치지 않습니다.
    • 예시: ICloneable 인터페이스를 구현하거나 수동으로 복사

17. 박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.

  • 박싱 (Boxing)
    • 값 형식 데이터를 참조 형식 객체로 변환하는 과정입니다.
    • 스택에 존재하던 값 형식이 힙에 할당된 객체로 복사됩니다.
    • 예시: int 값을 object 타입에 할당할 때
int value = 10;          // 스택에 저장
object obj = value;      // 힙에 박싱된 값 저장
  • 언박싱 (Unboxing)
    • 박싱된 객체(참조 형식)를 다시 값 형식으로 변환하는 과정입니다.
    • 힙에 있는 데이터를 다시 스택으로 복사합니다.
object obj = 10;         // 힙에 박싱된 값
int value = (int)obj;    // 스택으로 언박싱
  • 메모리 관점 요약
    • 박싱: 값 → 힙에 객체로 복사 (메모리 할당 비용 발생)
    • 언박싱: 힙의 객체 → 값으로 복사 (추가 형변환 비용 발생)

0개의 댓글