본문 바로가기

면접 준비12

[면접준비] 싱글톤과 static의 차이점 1. 싱글톤 - 단 하나의 객체(인스턴스)만을 생성하여 해당 객체를 공유하는 디자인 패턴 - 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성함 - 정적 클래스와 달리 싱글톤 클래스는 확장, 재정의, 인터페이스 구현이 가능 - 생성 시점을 조정 가능 - 객체이므로 힙에 싱글톤 객체가 저장됨 -> 쓰레드간 공유 가능 - 직렬화가 가능 2. static - 객체를 만들지 않고, 생성자도 갖지 않음 - 인터페이스 구현 불가능 - override 불가능 - 퍼포먼스는 빠름 - 절차지향적 성향이 강함 -> 무분별한 사용은 객체 지향을 해침 - 어플리케이션이 메모리에 로드될 때 스택에 바로 초기화 - 정적 스택에 저장되기 때문에 쓰레드 관리가 어려움 Q. 왜 static을 쓰지.. 2023. 8. 16.
[면접 준비] OOP란 무엇인가? 1.OOP - OOP(Object Oriented Programming)란 객체 지향 프로그래밍을 뜻한다. - 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 사용한다. - 객체들이 서로 유기적으로 상호작용하는 특징이 있다. - 대표적으로 Java와 C#이 있다. cf) 객체 - 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹 - ex) 컴퓨터(객체) -> 데이터(본체, 모니터, 키보드) + 기능(화면, 소리, 입력, 출력) 2. OOP의 장점 1) 코드 재사용성 증가 - 상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있음. 2) 생산성 향상 - 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음. 3) 자연적인 모델링 - 우리 일상생활의 모습의.. 2023. 7. 29.
[면접 준비][Unity] 드로우 콜(Draw Call) 1. 드로우 콜(Draw Call)이란? - CPU는 현재 프레임에 어떤 것을 그려야 할지 정하고 ,GPU에 오브젝트를 그려달라는 명령을 호출하는데 이 명령이 드로우 콜이다. - 한 오브젝트를 그릴때마다 CPU가 매번 렌더 상태(Render States)들을 변경하라는 명령을 한 뒤, DP Call을 해주는 과정 cf) 렌더 상태(Render States) - 오브젝트를 렌더링하기 시작하면 GPU에서 사용할 텍스쳐, 버텍스, 셰이더 등을 순차적으로 알려줘야 하는데 이러한 순서 정보들을 담은 테이블을 렌더 상태라고 하며, 각각의 요소는 GPU 메모리를 가리키는 포인터를 저장한다. cf) DP Call(Draw Primitive Call) - CPU가 렌더 상태를 변경하는 명령을 GPU에 보내고 나서 마지막.. 2023. 7. 27.
[면접 준비] 배열이 순차적으로 데이터를 저장하는 이유 1. 배열의 특징 - 데이터를 순차적으로 저장 - 인덱스를 이용하여 데이터에 빠르게 접근 가능 2. 배열이 순차적으로 저장되는 이유 - 실제 메모리 상에서 데이터가 순차적으로 저장되면 맨 앞의 주소와 해당 자료형의 byte수, 인덱스 번호만으로 데이터에 접근할 수 있기 때문이다.([2,4,5] -> 2의 주소 1000 -> 5의 주소 = 2의 주소(1000) + int형(4byte)*인덱스번호(2) = 1008) - 즉, 인덱스를 이용해 데이터에 빠르게 접근하기 위해 순차적으로 저장되는 것이다. 3. 데이터가 순차적으로 저장되는 배열의 단점 - 삽입 삭제가 느림 -> 삭제나 삽입 시 해당 위치 이후의 모든 원소들을 한칸씩 이동시켜야하기 때문 - resizing이 어려움 -> 크기가 예측이 어려운 데이터를.. 2023. 7. 26.
[면접 준비] int형이 4바이트인 이유? 1. 우리가 int형을 주로 사용하는 이유 - CPU가 가장 빠르게 처리할 수 있는 정수형이 int형이기 때문 - CPU가 연산하는 기본 단위가 32비트인데 이는 int의 메모리 크기와 동일하기 때문에 빠르게 처리 가능 2. int형이 4바이트인 이유 - CPU가 가장 효율적으로 다룰 수 있는 크기로 설정한 것임 3. int는 4바이트가 맞을까? - '정답은 아닐수도 있다' 이다. - 일반적으로 32비트 시스템에서는 4바이트 크기를 가지고, 64비트 시스템에서는 8바이트를 가진다. - 즉, CPU가 가지는 비트수에 따라서 int형은 바뀔수가 있는 것이다. - 사용하는 언어에 따라서도 달라질 수 있다. int형은 일반적으로 4바이트를 가진다고 알고 있습니다. 이는 일반적으로 CPU가 연산하는 기본 단위가 .. 2023. 7. 25.
[면접 준비][Graphics] 렌더링 파이프라인(Rendering Pipeline) 1. 렌더링 파이프라인 - 렌더링 파이프라인(Rendering Pipeline) 또는 그래픽스 렌더링 파이프라인(Graphics rendering pipeline)이라고 부름 - 3차원으로 만들어진 모델을 2차원에 투영하는 렌더링 과정의 프로세스를 자세하게 표현한 것 - 컴퓨터에 데이터로 존재하는 3D 리소스가 모니터에 출력되는 과정이 렌더링 파이프라인을 따름 2. 렌더링 파이프라인의 과정 - 첨부된 사진과 같은 과정에 따라 화면에 도형을 표시한다. - 초록색은 필수적인 과정이고, 주황색은 사용자가 조작이 가능한 과정이다. 1) Input Assembler(입력 조립) - 렌더링 파이프라인의 첫 단계, Vertex Specification 이라고도 불림 - 이 단계는 CPU에서 렌더링을 수행할 도형의 정.. 2023. 7. 23.
[면접 준비][자료구조] 스택과 큐의 차이점 1. 스택(Stack) - 나중에 들어간 것이 먼저 나오는 후입선출의 구조이다.(LIFO) - 비어있는 스택에서 원소를 추출하면 stack underflow - 스택이 넘치는 경우 stack overflow - ex) 뒤로가기, 실행취소, 역순 문자열 만들기 등 2. 큐(Queue) - 먼저 들어간 것이 먼저 나오는 선입선출의 구조(FIFO) - 한쪽 끝에서는 삽입 작업이, 다른 쪽 끝에서는 삭제 작업이 양쪽으로 이루어짐 - ex) 줄을 서서 기다려야하는 모든 행동들, 프로세스 관리, 너비우선탐색(BFS) 등 스택은 나중에 들어간 것이 먼저 나오는 후입선출, LIFO의 구조이고, 큐는 먼저 들어간 것이 먼저 나오는 선입선출, FIFO의 구조입니다. 스택의 예시로는 실행취소 등이 있고, 큐의 예시로는 줄을.. 2023. 7. 22.
[면접 준비][자료구조] 벡터, 리스트, 맵, 딕셔너리 1. 배열 - 스택에 생성되는 인덱스 기반의 기본 자료구조 - 길이가 고정되어 있음 - 메모리의 효율성이 높음 - 원소에 직접 접근하는 것이 쉬움 - 원소를 중간에 추가하거나 삭제하는 것은 어려움 2. 벡터 - 힙에 생성되어 메모리에 동적으로 할당되는 iterator 기반 컨테이너 - 배열과 같이 연속적인 메모리 값에 할당되고 특정 원소에 접근하기 쉬움 - 속도 면에서는 배열에 비해 성능이 떨어지지만 자료를 효율적으로 관리할 수 있고, 예외처리가 쉬움 - 배열과 마찬가지로 원소를 중간에 추가하거나 삭제하는 것은 어려움 3. 리스트 - 비연속적인 메모리 값을 가짐 - 포인터로 연결되어 연결리스트라고 불림 - 각 원소의 추가 및 제거가 빠르고 쉬움 - 원소에 직접 접근하는 것은 불가능하고 처음이나 끝부터 차.. 2023. 7. 21.
[면접 준비][C#] 제네릭(Generic) 1. 제네릭(Generic)이란? - 데이터 형식을 일반화하여 사용이 가능하게 한 형식 매개변수(Type parameter)이다. - 박싱/언박싱(강제 형번환)이 일어나지 않도록 타입을 미리 지정하는 방식이다. 2. 제네릭의 장점 - 지정된 타입과 호환하는 타입에 대해서만 사용할 수 있게하고, 그렇지 않은 경우 컴파일 에러를 발생시켜 타입에 대한 안정성이 높다. - 런타임 시 데이터 형식이 결정 되는 것이 아닌 코드에서 호출할 때 데이터 형식이 결정되므로 성능 저하가 없다. - 또한 Object 타입을 이용해 값 타입을 사용한 경우 박싱이나 언박싱이 일어나는데 제네릭을 사용하면 값 타입의 인스턴스 자체를 값 자체로 전달할 수 있어 박싱이 수행되지 않아 성능이 더 좋다. - 컴파일러가 형변환을 해주기 때문.. 2023. 7. 20.
[면접 준비][C#] 박싱(boxing)과 언박싱(unboxing)의 차이점 1. 박싱(boxing) - 값 형식(value types)을 참조 형식(reference types)으로 변환 해주는 것 2. 언박싱(boxing) - 박싱했던 값을 다시 원상태로 복귀 시키는 것 - 즉, 참조 형식을 값 형식으로 변환 해주는 것 3. object 타입 - 박싱과 언박싱이 가능한 이유 - 모든 타입의 부모 객체 -> 모든 타입이 object로 변환이 가능함 - object 타입이 참조 형식이기 때문에 임의의 타입을 object형으로 형변환 하는것을 박싱이라 한다. - 반대로, object형에서 다시 원상태로 복귀 시키는 것을 언박싱이라 한다. 4. 박싱 언박싱을 사용하는 이유 - 만약 int형으로 배열을 선언한다면 int형 외에 string형 등의 참조형은 배열에 넣을 수 없지만, ob.. 2023. 7. 20.
[면접 준비][C#] class와 struct의 차이점 1. struct(구조체) [C#] - 값 형식 -> 복사(call by value) - 스택에 할당 -> GC사용x -> 프로그램 속도 향상에 도움 - 자주 사용하지 않고 인스턴스 크기가 16바이트 미만인 경우에 사용 - protect 선언 불가 , 상속 불가 [C++] - 기본값이 public 2. class(클래스) [C#] - 참조 형식 -> 주소(call by reference) - 힙에 할당됨 -> 삭제시 GC사용 -> 프로그램 속도 저하 - 변수나 함수 등이 자주 사용될 경우에는 참조로 접근하는 것이 좋음 - protect 선언 가능, 상속 가능 [C++] - 기본값이 private C#에서 구조체는 값 형식인 call by value 형태로 값이 복사되어 전달되고, 클래스는 참조 형식인 c.. 2023. 7. 20.
[면접 준비] Call by Value와 Call by reference의 차이점 1. call by value(값에 의한 호출) - 인자로 받는 값을 복사하여 처리한다. - 복사하여 처리하기 때문에 안전하고 원래 값이 보존된다. - 복사를 하기 때문에 메모리 사용량이 늘어난다. 2. call by reference(참조에 의한 호출) - 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. - 복사를 하지않고 직접 참조를 하기에 빠르다. - 직접 참조를 하기에 원래 값이 영향을 받는다. call by value는 인자로 받는 값을 복사하여 처리하는 값에 의한 호출이고, call by reference는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 참조에 의한 호출입니다. call by value는 복사하여 값을 처리하기에 원래 값이 보존되어 안전하지만 복사를 하기에.. 2023. 7. 20.