라벨이 배열인 게시물 표시

C# List 사용법: Add·Remove·Insert와 배열 차이 정리

이미지
C#에서 순서가 있는 데이터를 담고 실행 중 항목을 추가하거나 삭제해야 한다면 List<T> 가 가장 먼저 떠올릴 수 있는 컬렉션이에요. T 자리에 int , string , 사용자 정의 클래스 같은 실제 형식을 지정하므로 잘못된 값은 컴파일 단계에서 걸러지고, 꺼낼 때마다 형 변환할 필요도 없습니다. 빠른 선택 기준 크기가 고정된 데이터는 배열, 크기가 변하는 순차 데이터는 List<T> , 키로 값을 자주 찾는 데이터는 Dictionary<TKey,TValue> 가 어울립니다. List<T> 는 인덱스 접근과 순회가 편하지만 목록 앞이나 중간의 잦은 삽입·삭제에는 비용이 생겨요. List<T>에서 T는 무엇을 뜻할까요? T 는 나중에 실제 형식으로 바뀌는 형식 매개변수입니다. List<int> 는 정수만, List<string> 은 문자열만 보관해요. 예전의 ArrayList 는 여러 형식을 한 목록에 넣을 수 있어 값을 꺼낼 때 캐스팅이 필요했고, 값 형식은 boxing과 unboxing이 발생할 수 있었습니다. 현재 .NET 코드에서는 특별한 이유가 없다면 형식 안전성이 있는 제네릭 컬렉션을 사용하는 편이 좋습니다. using System.Collections.Generic; List<string> tasks = new(); tasks.Add("로그 확인"); tasks.Add("백업 검증"); string firstTask = tasks[0]; Console.WriteLine(firstTask); 최신 C# 프로젝트에서는 암시적 전역 using 설정에 따라 using System.Collections.Generic; 이 없어도 컴파일될 수 있습니다. 하지만 코드 조각을 다른 프로젝트로 옮길 때는 네임스페이스가 필요할 수 있으니, 오류가 난다면 먼저 using 선언과 대상 프레임워크 설정을 확인하세요. 기존 ...

C# params 가변 매개변수 사용법과 배열 전달 시 주의점

이미지
C#의 params는 같은 형식의 인수를 0개부터 여러 개까지 자연스럽게 받게 해줍니다. 메서드 내부에서는 배열처럼 다루지만, 선언 위치와 오버로드 조합을 잘못 잡으면 호출이 모호해질 수 있어요. 기존 코드의 params 선언과 호출 예제입니다. params 매개변수는 매개변수 목록의 마지막에 하나만 둘 수 있습니다. 먼저 확인할 답 C#의 params는 같은 형식의 인수를 0개부터 여러 개까지 자연스럽게 받게 해줍니다. 메서드 내부에서는 배열처럼 다루지만, 선언 위치와 오버로드 조합을 잘못 잡으면 호출이 모호해질 수 있어요. 호출자는 쉼표로 값을 넘기고 메서드는 배열로 받는다 params int[] numbers로 선언하면 Sum(1, 2, 3)처럼 호출할 수 있습니다. 컴파일러가 인수를 배열 형태로 묶어 전달하며, 이미 int[] 배열이 있다면 그 배열 자체를 넘길 수도 있어요. 인수를 하나도 쓰지 않은 Sum()도 허용되므로 메서드가 빈 배열을 어떻게 처리할지 정해야 합니다. params는 매개변수 목록의 마지막에 하나만 올 수 있습니다. 앞에는 일반 매개변수를 둘 수 있지만 뒤에는 둘 수 없어요. 서로 다른 형식을 무작정 object[]로 받으면 호출은 편해 보여도 실행 중 형식 검사가 늘어나므로 공통 형식이나 제네릭 설계를 먼저 검토합니다. 배열을 넘기는 호출과 여러 값을 나열하는 호출을 구분한다 Sum(values)는 기존 배열을 전달하는 호출이고 Sum(1,2,3)은 컴파일러가 전달 구조를 만들어 주는 호출입니다. 반복이 매우 잦은 성능 민감 경로에서는 할당과 호출 형태를 측정해야 하지만, 대부분의 일반 코드에서는 API의 읽기 쉬움이 먼저예요. null을 명시적으로 전달하면 빈 호출과 의미가 달라질 수 있습니다. nullable 경고를 켜고 null을 허용하지 않도록 계약을 정하거나, 메서드 시작에서 ArgumentNullException.ThrowIfNull을 사용하세요. 빈 배열은 정상 입력인지 오류인지도 문서와 테스트에 남겨야 합니다. ...