Language 23

[C#] == , Equals, ReferenceEquals

Big Integer를 구현하면서 ==를 오버로드 하다보면 노란색 경고로 !=, Equals 등을 구현하지 않았다고 뜬다.==와 Equals는 동일한 작동일 것 같은데 왜 이것도 오버라이드 하라고 빼액 거리는지 둘이 어떤 차이가 있는지 궁금해졌다.근데 또 ==을 오버라이드하다보면, ReferecneEquals로 null체크를 한다. 이건 또 뭘까?== 연산자값 타입 :두 값이 비슷한지 비교참조 타임 : 두 객체가 동일한 메모리 위치를 참조하는지 비교Equals매서드로, 클래스에만 존재객체의 동일성을 판단하는데 사용기본적으로 두 객체가 같은 인스턴스를 가리키는지 확인ReferenceEqualsObject 클래스의 static method로, 두 객체가 동일한 참조를 가리키는지 확인값형식은 값을 박싱하여 비..

Language/C# 2024.11.14

[C#] Span

BigInteger 구현을 하면서 최적화 하기 위한 방법을 찾던중 Span라는 문법을 발견. Span란?Span는 C# 7.2에서 도입된 구조체로, 연속된 메모리 영역을 안전하고 효율적으로 처리할 수 있도록 도와줌. Span는 기본적으로 배열, 문자열, 혹은 포인터와 같은 연속된 메모리 공간에 대한 뷰를 제공함. 이를 통해 메모리를 복사하지 않고도 데이터를 조작할 수 있어 성능을 크게 개선할 수 있음.기본적인 특징은 다음과 같음:메모리 안전성: Span는 배열을 다룰 때 흔히 발생할 수 있는 인덱스 범위 초과 문제에 대해 안전한 처리를 제공.힙 할당 회피: Span는 스택에 할당되어 GC(가비지 컬렉션)의 부담을 줄이므로, 특히 성능이 중요한 코드에서 유용.범용성: Span는 배열뿐만 아니라 메모리의 ..

Language/C# 2024.11.12

[C#] Skip

C#에서 배열의 Skip() 메서드 사용법: 배열 요소를 쉽게 건너뛰기C#에서 배열이나 리스트와 같은 컬렉션을 다루다 보면, 특정 요소를 건너뛰고 작업하고 싶을 때가 있습니다. 예를 들어, 첫 번째 요소를 제외하고 나머지 모든 요소를 처리하고 싶다면 어떻게 할까요? 이때 유용하게 사용할 수 있는 것이 바로 Skip() 메서드입니다. 이번 포스팅에서는 Skip() 메서드가 무엇인지, 그리고 실무에서 어떻게 사용할 수 있는지 간단하게 설명드리겠습니다.Skip() 메서드란?Skip() 메서드는 LINQ (Language Integrated Query)에서 제공하는 확장 메서드로, 컬렉션의 앞부분 요소를 건너뛰고 나머지 요소를 반환합니다. 이 메서드는 컬렉션의 일부를 무시하고 나머지 요소로 새로운 컬렉션을 만들..

Language/C# 2024.11.06

[C++] 형변환

C 스타일 형변환int a = 10;double b = (double)a; // C 스타일 형변환C++ 스타일 형변환 - 캐스팅 연산자1. static_cast컴파일 타임에 수행되며, 관련 있는 타입들 간의 변환에 사용int a = 42;double b = static_cast(a); // 정수를 실수로 변환double d = 3.14;int i = static_cast(d); // 실수를 정수로 변환 (소수점 이하 버림)### 2. [dynamic_cast](https://learn.microsoft.com/ko-kr/cpp/cpp/dynamic-cast-operator?view=msvc-170)- 런타임 타입 검사- 상속관계에서 안전하게 다운캐스팅할 때 사용- 캐스팅이 실패하면 nullptr반환- 가..

Language/C++ 2024.10.24

[C++] transform

입력 범위의 각 요소에 대해 주어진 함수를 적용하여 다른 범위에 저장하는 역할std::transform(input_begin, input_end, output_begin, unary_op);단항 연산문자열 소문자로 바꾸기#include #include #include #include int main() { std::string str = "Hello, World!"; std::string result; result.resize(str.size());// str의 모든 문자를 소문자로 변환하여 result에 저장std::transform(str.begin(), str.end(), result.begin(), ::tolower);std::cout }- 배열에 각 수를 더하기 - 람다..

Language/C++ 2024.10.24

[C#] Serialization & Deserializaton

[C#] Serialization & Deserializaton직렬화(Serialization)와 역직렬화(Deserialization)는 데이터의 저장 및 전송을 용이하게 하기 위해 데이터를 변환하는 것1. 직렬화 (Serialization)직렬화는 객체 / 데이터를 바이트등의 형태로 변환하여 저장/전송 할 수 있도록 하는 과정대표적 직렬화 방식JsonXmlBinary사용 예시파일 저장네트워크로 객체 전송2. 역직렬화 (Deserialization)직렬화된 데이터를 다시 객체로 복원하는 과정저장된 바이트나 문자열을 다시 객체로 불러오는 것C# Json직렬화 예시기본 코드string filepath = "filepath.json";string json = JsonSerializer.Serialize(ob..

Language/C# 2024.10.14

[C#] String Builder

String의 문제점String은 불변 특성을 가져 문자열을 수정하거나 연결할 때마다 새로운 인스턴스가 생성되어 메모리 할당과 해제가 반복적으로 발생하게 됨. -> 성능저하StringBuilder란?string의 새로운 인스턴스 생성문제를 해결하기 위해 만들어짐문자열을 동적으로 수정할 수 있는 가변 객체로, 문자열이 자주 변경되는 상황에서 성능을 향상 시키기위해 사용됨.

Language/C# 2024.10.14