목록언어 관련 (5)
흔한 덕후의 잡동사니

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#의 스레드는 한가지 특이한 점..