목록언어 관련/C# (7)
흔한 덕후의 잡동사니

기술 면접을 준비하며, 내가 알고 있는 지식을 바탕으로 관련된 문제들을 정리해보았다. 이 답변들은 반드시 정답이 아닐 수 있으며, 면접관이 기대하는 방향과 다를 수도 있다. 참고할 경우 이러한 점을 감안하고 읽는 것이 좋다. 문제31. Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.더보기Unity 생명주기(Unity Life Cycle)는 Unity 엔진이 스크립트를 실행할 때 호출하는 일련의 함수 흐름이다. 32. MonoBehaviour 클래스의 주요 메서드와 그 기능에 대해 설명해주세요. - MonoBehaviour 클래스에서 `Start`와 `Awake`의 차이점은 무엇이며, 이를 적절히 사용하는 방법에 대해 설명해주세요.더보기MonoBehaviour는 Unit..

기술 면접을 준비하며, 내가 알고 있는 지식을 바탕으로 관련된 문제들을 정리해보았다. 이 답변들은 반드시 정답이 아닐 수 있으며, 면접관이 기대하는 방향과 다를 수도 있다. 참고할 경우 이러한 점을 감안하고 읽는 것이 좋다. 문제1. 객체란 무엇인가요? 클래스와 어떤 연관이 있나요?더보기 객체(Object)는 클래스(Class)의 설계도를 바탕으로 실제로 메모리에 생성된 구체적인 실체이다. 클래스가 데이터와 행위를 정의하는 일종의 틀이라면, 객체는 이 틀을 이용하여 만들어진 실체로서 상태(데이터)와 행동(메서드)을 가진다. 예를 들자면 다음과 같다.#include #include // 클래스 정의class Player {public: std::string name; int hp; // 생..

C#의 제네릭(Generic)과 C++의 템플릿(Template)은 모두 타입에 독립적인 코드를 작성할 수 있도록 해주는 기능이지만, 구현 방식과 동작 원리에서 차이점이 있다. 1. 컴파일 시점 vs 런타임 시점[ C++ Template ] C++ 템플릿은 컴파일 시점에 인스턴스화된다. 컴파일러는 템플릿 코드를 사용하는 각 타입에 대해 별도의 코드를 생성한다. 예를 들어, std::vector와 std::vector은 컴파일 시점에 서로 다른 코드로 생성된다.이로 인해 템플릿은 컴파일 시간에 타입 검사를 수행하며, 잘못된 타입이 사용되면 컴파일 오류가 발생한다.[ C# Generic ]C#의 제네릭은 런타임 시점에 인스턴스화된다. 제네릭 코드는 컴파일 시점에 중간 언어(IL)로 컴파일되고, 런타임에 JI..
1. 텍스트 파일 입출력 (StreamWriter, StreamReader)텍스트 파일을 다룰 때 사용된다. 사람이 읽을 수 있는 형식으로 데이터를 처리한다.StreamWriter : 텍스트 파일에 데이터를 쓸 때 사용StreamReader : 텍스트 파일에서 데이터를 읽을 때 사용using (StreamWriter writer = new StreamWriter("example.txt")){ writer.WriteLine("Hello, world!");}using (StreamReader reader = new StreamReader("example.txt")){ string content = reader.ReadToEnd(); Console.WriteLine(content);} 문자 단..
c#의 객체는 크게 2가지, 참조형(reference type) / 값 형식(value type) 로 나뉜다. 이는 저장되는 메모리의 위치에 따라 달라진다. 이와 관련된 문제점 중 boxing에 관하여 알아보고자 한다. new 키워드C#에서 new 키워드는 주로 객체를 생성하거나 값 타입을 초기화하는 데 사용된다.new를 사용할 때, 값 타입(구조체)일지라도 힙에 객체를 생성하지 않고, 스택에 값이 할당된다. 값 타입은 힙의 메모리 할당 없이 스택에 직접 할당되므로 가볍고 빠르다는 말이 많은데, 스택은 메모리 할당 과정이 없으니깐 당연히 빠르다. Boxing이란?Boxing은 값 타입(Value Type)을 참조 타입(Reference Type)으로 변환하는 과정을 의미한다. 이는 주로 object나 i..
List와 LinkedList의 주요 차이점내부 구조동적 배열 (연속된 메모리 할당)이중 연결 리스트 (노드 기반)메모리 사용연속된 메모리 블록 사용 (낭비 적음)추가적인 포인터 메모리 필요접근 속도O(1) (인덱스를 통한 빠른 접근)O(n) (순차 검색 필요)삽입/삭제 속도O(n) (중간 삽입/삭제 시 이동 필요)O(1) (노드 추가/삭제)인덱스 접근가능 (배열처럼 [index])불가능 (순차 탐색 필요)순차 접근빠름 (연속된 메모리로 캐시 효율적)느림 (노드를 따라가야 함)적합한 상황조회와 인덱스 기반 작업이 많은 경우빈번한 삽입/삭제 작업이 많은 경우 이는 C#의 List는 C++의 std::vector와, C#의 LinkedList는 C++의 std::list와 유사한 구조와 동작 방식을 가지기 ..
.NET Framework 4부터 다중 스레딩을 사용하는 권장 방법은 TPL(작업 병렬 라이브러리) 및 PLINQ(병렬 LINQ)를 사용하는 것이다. TPL 및 PLINQ는 ThreadPool 스레드를 사용하는데, ThreadPool은 C++의 IOCP 방식으로 관리된다. 스레드 풀의 최대 스레드 갯수는 Task 등 내부적으로 비동기 방식을 사용하는 모든 기능에 영향을 미치므로 하드웨어에 비해 성능이 나오지 않는다면 스레드 갯수를 바꿔가며 테스트해보자. 물론 개별적으로 스레드를 만들어 등록할 수 도 있지만 C#에서는 스레드풀과 관련된 여러 API들이 많아 코드의 이해도 상향과 프로젝트의 관리를 위해 System.Threading에서 제공하는 API를 사용하는 것이 좋다. C#의 스레드는 한가지 특이한 점..