VisualStudio 98

[C#] List<T> LINQ 모음

1. Take List에서 index 0부터 원하는 count만큼 객체를 반환한다 이때 ListCount보다 찾고자 하는 Count가 클 경우 오류가 발생하지 않고 List가 반환된다. 아래 예제는 0번인덱스 부터 0~1 2개의 객체를 반환하라는 뜻이다. static void Main(string[] args) { List testList = new List() { 1,2,3,4,5 }; List taskList = testList.Take(2).ToList(); foreach (var item in taskList) Console.WriteLine(item); } 2. Skip List에서 원하는 index부터 끝까지 객체를 반환한다. 아래 예제는 3번 index 부터 나머지 모든 객체를 반환한다. s..

VisualStudio/C# 2023.09.21

[C++] 스마트 포인터 (shared_ptr, weak_ptr, unique_ptr)

스마트 포인터인동적 메모리를 할당하면 스택에 주소가 입력되고 힙 메모리에 데이터가 입력되게 된다. 이렇게 동적으로 할당된 메모리는 사용 후 반드시 직접 해제를 해줘야 하는데 더 이상 사용하지 않는 메모리가 메모리를 점유하는 메모리 누수 현상이 일어나기 때문이다. 하지만 직접메모리를 해제하면 메모리관리를 하면서 문제가 발생할 수 있다. 예를 들어 아래와 같이 다른 객체의 포인터를 참조하고 있는 객체가 존재하고 참조하고 있는 객체의  힙 메모리가 해제된 상태로 해당 객체를 접근하게 되면 이미 메모리가 해제된 상태이기 때문에 이미 해제된 메모리에 접근을 하는 문제가 발생하며 해당 오류가 발생하지 않기 위해서는 예외처리도 많이 들어가고 구조를 짜기에도 어려움이 많이 존재한다. 때문에 C++에서는 스파트 포인터는..

VisualStudio/C++ 2023.07.31

[C++] STL(Standard Template Library)

STL 이란? C++로 프로그래밍할 때 필요한 자료구조나 알고리즘들을 템플릿으로 제공하는 라이브러리이다. 컨테이너(Container) 데이터를 저장하는 객체 (자료구조 Data Structure)를 포함한다. 시퀀스 컨테이너 - vector, list, deque 3가지를 제공한다. vector vector는 동적 배열로 동적으로 커지는 배열을 의미한다. 미리 여분의 공간을 생성하며 여분의 공간을 모두 소모하면 추가로 여분의 공간을 지속적으로 생성하면서 동적으로 배열을 만든다. vector는 원소가 하나의 메모리 블록에 연속하게 저장돼야 하는 특징을 가지고 있다. size 동적 배열 안에 실제로 사용하고 있는 크기를 리턴하며 데이터가 삭제되면 함께 줄어든다. capacity 실제사용하고 있는 크기뿐 아니..

VisualStudio/C++ 2023.07.25

[C++] 형변환 (static_cast, dynamic_cast, const_cast, reinterpret_cast)

static_cast타입을 변경할 때 상식정인 캐스팅만 허용된다. Ex)1) int float 등2) Parent* -> Sun* (다운캐스팅) 안전성은 보장하지 않는다. 아래 코드에서 보면 sun2 또 한 parent를 상속받기 때문에 parent로 캐스팅되고이 parent를  static_cast를 사용하여 sun1으로 캐스팅이 되지만 서로 설계한 매개변수가 다르기 때문에 잘 못 된 메모리를 접근할 수 있다.class Parent{};class Sun1 : public Parent{};class Sun2 : public Parent{};int main(){ int hp = 100; int maxHp = 200; float ratio = static_cast(hp / maxHp); cout (pare..

VisualStudio/C++ 2023.07.24

[C++] 타입변환에서 소멸자 Virtual 사용

상속을 받는 클래스가 있다고 가정하자. c++에서는 생성자는 부모클래스 생성자에서 자식클래스의 생성자 순으로 호출된다. 소멸자에서 만약 부모 클래스의 소멸자에 Virtual을 정의했다면 제거할 때 자식클래스의 소멸자가 호출된 후 부모 클래스의 소멸자가 호출된다. Virtual 클래스로 소멸자를 정의하지 않은 상태에서 자식클래스를 부모클래스 포인터를 사용하여 제거를 한다면 부모클래스의 소멸자만 호출되며 자식의 소멸자는 호출되지 않는 다 즉 완벽하게 제거가 이루어졌다고 볼 수 없다. virtual로 정의한 부모클래스에서 부모포인터로 삭제 할 때 자식의 소멸자가 호출되는 이유는 virtual로 정의된 클래스가 있다면 가상함수테이블이 만들어져 바이너리 영역에 기록되며 해당 클래스로 만들어진 객체에서 함수를 호출..

VisualStudio/C++ 2023.07.24

[C#] Enum타입 리플렉션(Reflection)사용하여 값 받아오는 방법

정의한 Enum enum TestEnum { test1, test2, test3, } Enum -> string string name1 = Enum.GetName(typeof(TestEnum), 0); string name2 = Enum.GetName(typeof(TestEnum), TestEnum.test1); Console.WriteLine($"{name1}, {name2}"); Enum -> string[] string[] names = Enum.GetNames(typeof(TestEnum)); foreach (string name in names) { Console.Write($"{name}, "); } string -> Enum TestEnum myenum1 = (TestEnum)Enum.Par..

VisualStudio/C# 2023.02.16

[C#] Byte와 문자열간 변환 방법과 인코딩 방식 설명

Byte to String1. Encoding 클래스 사용 ( UTF8, ASCII, Unicode)System.Text.Encoding 클래스는 다양한 인코딩 방식을 제공합니다. UTF8, ASCII, Unicode 등을 사용하여 byte 배열을 문자열로 변환할 수 있습니다. 특징텍스트 데이터를 저장할 때 주로 사용한다.byte[] bytes = { 72, 101, 108, 108, 111 };string str = Encoding.UTF8.GetString(bytes);Console.WriteLine(str); // 출력: Hello2. BitConverter 클래스 사용 (16 진수)System.BitConverter 클래스는 byte 배열을 16진수 문자열로 변환하는 방법을 제공합니다. 데이터 디..

VisualStudio/C# 2023.02.09

[C#] Struct를 byte로 변환, byte를 Struct로 변환

static byte[] StructToByte(object obj) { //구조체 사이즈 int size = Marshal.SizeOf(obj); //사이즈 만큼 메모리 할당 받기 byte[] buffer = new byte[size]; IntPtr ptr = Marshal.AllocHGlobal(size); //구조체 주소값 가져오기 Marshal.StructureToPtr(obj, ptr, false); //메모리 복사 Marshal.Copy(ptr, buffer, 0, size); Marshal.FreeHGlobal(ptr); return buffer; } public static byte[] StructToByte(T structure) where T : struct { byte[] buffer..

VisualStudio/C# 2023.02.02