본문 바로가기

Tuple

C# 구조적 비교와 EqualityComparer<T> 커스터마이징 컬렉션 키 비교나 동등성 판단에서 참조 동일성 대신 내용(구조)을 비교하면 버그를 크게 줄일 수 있습니다. C#/.NET은 배열, 튜플, 레코드 등에서 구조적 비교를 지원하며, EqualityComparer를 통해 사용자 정의 타입에도 손쉽게 커스터마이징할 수 있습니다.1. 구조적 비교란?구조적 비교는 객체의 참조가 아닌 내부 구성 요소 값을 기준으로 동등성/정렬을 판단하는 방식입니다. 기본 배열 비교는 참조 비교이며, 튜플/레코드/ValueTuple은 기본적으로 구조적 비교를 지원합니다.using System;using System.Collections;var a1 = new[] { 1, 2, 3 };var a2 = new[] { 1, 2, 3 };Console.WriteLine(Equals(a1, a.. 더보기
C# 값 튜플(ValueTuple) vs Tuple 성능 비교 ValueTuple은 구조체, Tuple은 클래스입니다. 이 한 줄이 성능 차이의 대부분을 설명합니다. 구조체인 ValueTuple은 스택 또는 포함하는 객체 내부에 저장되어 할당과 GC 비용이 적고, 클래스인 Tuple은 힙 할당과 GC 압력이 발생합니다. 실용적인 관점에서 둘의 속도, 메모리 차이를 간단한 코드와 함께 정리합니다.1. 핵심 차이 요약- ValueTuple: 구조체(struct), 필드가 공개이며(mutability) 이름 지정과 분해 할당 지원, 일반적으로 할당 없음(escape 시 제외), 빠름.- Tuple: 참조형(class), 불변(immutable), 항상 힙 할당, GC 대상, Item1/Item2 등만 제공, 느림.- 성능 포인트: 작은 데이터(예: 2~3개 값) 왕복 시.. 더보기
C# 튜플 (Tuple)과 분해 1. 개념 설명튜플은 여러 값을 간단히 묶는 값 형식입니다. C# 7부터 도입된 ValueTuple과 요소 이름 지정으로 읽기 쉬운 코드를 작성합니다. 메서드에서 여러 값을 반환하거나, 반환값을 곧바로 분해해 지역 변수로 받을 수 있습니다. 또한 _ 버리기(discard)와 foreach 분해도 지원합니다.2. 코드 예제아래 예제는 생성, 메서드 반환, 분해, discard, foreach 분해를 모두 보여줍니다. 콘솔 출력으로 결과를 확인할 수 있습니다.using System;using System.Collections.Generic;class Program{ static void Main() { var point = (x: 3, y: 5); var (.. 더보기