IRONSOFTWAREHOME
개발자 업데이트

C# 찾기 (개발자를 위한 작동 방식)

제이콥 멜러, 팀 아이언 최고기술책임자
Jacob Mellor
Updated: 2025년 7월 28일

C#의 유용한 Find 함수에 대한 튜토리얼에 오신 것을 환영합니다. 코딩 과정을 간소화할 수 있는 강력한 기능을 방금 발견하셨습니다. 그래서, 경험이 많은 코더든, 이제 시작하는 코더든, 이 튜토리얼은 진행하는 모든 요소를 안내할 것입니다.

Find의 기본

본질적으로, Find는 특정한 조건을 만족하는 컬렉션, 배열 또는 리스트 내에서 가장 첫 번째 요소를 찾을 수 있는 함수입니다. 조건은 무엇인가요? 프로그래밍에서 조건은 컬렉션의 요소에 정의된 특정 조건을 검사하는 함수입니다.

이제 공공 클래스 예제로 들어가봅시다.

public class BikePart
{
    public string Id { get; set; } // Property to identify the bike part

    // Override the Equals method to specify how to compare two BikePart objects
    public override bool Equals(object obj)
    {
        if (obj == null || !(obj is BikePart))
            return false;

        return this.Id == ((BikePart)obj).Id;
    }

    // Override GetHashCode for hashing BikePart objects
    public override int GetHashCode()
    {
        return this.Id.GetHashCode();
    }

    // Override ToString to return a custom string representation of the object
    public override string ToString()
    {
        return "BikePart ID: " + this.Id;
    }
}

이 코드에서 BikePart는 우리의 public 클래스이며, 각 자전거 부품을 식별하기 위한 public 문자열 ID를 포함하고 있습니다. 우리는 자전거 부품 ID를 잘 출력하기 위해 ToString 메소드를 재정의하였으며, 비교 용도로 EqualsGetHashCode 메소드도 재정의하였습니다.

조건을 사용한 Find 사용

이제 BikePart 클래스를 만들었으니, 자전거 부품 목록을 만들고 Find를 사용하여 ID를 기반으로 특정 부품을 찾을 수 있습니다. 다음 예제를 고려해 봅시다:

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
    };

    // Define a predicate to find a BikePart with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };
    BikePart chainRingPart = bikeParts.Find(findChainRingPredicate);

    // Print the found BikePart's ID to the console
    Console.WriteLine(chainRingPart.ToString());
}

이 코드에서 우리는 고유한 ID로 네 개의 BikePart 객체를 인스턴스화합니다. 다음으로, 자전거 부품이 'Chain Ring ID'를 가지고 있는지 확인하는 조건을 가진 프레디케이트 findChainRingPredicate를 생성합니다. 마지막으로 우리가 정의한 프레디케이트를 사용하여 자전거 부품의 목록에서 Find를 호출하고 찾은 부품의 ID를 콘솔에 출력합니다.

조건 매개변수 이해하기

Find 메소드에서 프레디케이트 일치 매개변수에 대해 궁금하실 것 같습니다. 이곳에서 Find 메소드가 요소를 반환할 조건을 정의합니다. 우리의 경우에는 Find 메소드가 'Chain Ring ID'와 일치하는 첫 번째 요소를 반환하도록 원했습니다.

프레디케이트에 정의된 조건을 만족하는 요소가 없으면 Find 메소드는 기본값을 반환합니다. 예를 들어, 정수 배열을 사용 중이고 프레디케이트가 일치를 찾지 못하면, Find 메소드는 C#에서 정수의 기본값인 '0'을 반환합니다.

선형 검색 원칙

중요한 점은 Find 함수가 전체 배열, 리스트 또는 컬렉션에서 선형 탐색을 수행한다는 것입니다. 즉, 첫 번째 요소에서 시작하여 조건을 만족하는 첫 번째 요소를 찾을 때까지 각 요소를 순차적으로 검사합니다.

일부 경우 첫 번째 요소가 아닌 조건을 만족하는 마지막 요소를 찾고 싶을 수 있습니다. 이를 위해 C#은 FindLast 함수를 제공합니다.

FindIndexFindLastIndex

지정한 프레디케이트와 일치하는 요소의 첫 번째 발생 위치를 찾을 수 있게 하는 Find처럼, C#은 조건에 맞는 첫 번째와 마지막 요소의 인덱스를 제공하는 FindIndexFindLastIndex 메소드도 제공합니다.

예제를 시도해 봅시다:

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects with an additional duplicate entry
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
        new BikePart { Id = "Chain Ring ID" }, // Added a second chain ring
    };

    // Define a predicate to find a BikePart with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };

    // Find the index of the first and last occurrence of the specified BikePart
    int firstChainRingIndex = bikeParts.FindIndex(findChainRingPredicate);
    int lastChainRingIndex = bikeParts.FindLastIndex(findChainRingPredicate);

    // Print the indices to the console
    Console.WriteLine($"First Chain Ring ID found at index: {firstChainRingIndex}");
    Console.WriteLine($"Last Chain Ring ID found at index: {lastChainRingIndex}");
}

FindAll의 힘

이름이 시사하듯이, FindAll 메소드는 프레디케이트를 만족하는 컬렉션의 모든 요소를 검색합니다. 특정 조건에 따라 요소를 필터링해야 할 때 사용됩니다. FindAll 메소드는 모든 일치하는 요소로 새로운 리스트를 반환합니다.

다음은 코드 예시입니다.

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects with an additional duplicate entry
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
        new BikePart { Id = "Chain Ring ID" }, // Added a second chain ring
    };

    // Define a predicate to find all BikeParts with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };

    // Use FindAll to get all matching BikePart objects
    List<BikePart> chainRings = bikeParts.FindAll(findChainRingPredicate);

    // Print the count and details of each found BikePart
    Console.WriteLine($"Found {chainRings.Count} Chain Rings:");
    foreach (BikePart chainRing in chainRings)
    {
        Console.WriteLine(chainRing.ToString());
    }
}

IronPDF를 도입하기

우리의 C# 찾기 지식을 활용할 수 있는 중요한 영역은 PDF 처리에 강력한 C# 라이브러리인 IronPDF를 사용한 PDF 콘텐츠 조작입니다.

다양한 자전거 부품 정보가 포함된 PDF 문서를 다룬다고 가정해 보겠습니다. 종종 이 콘텐츠 내에서 특정 부품을 찾아야 합니다. 여기서 IronPDF와 C# 찾기 메서드가 결합되어 강력한 솔루션을 제공합니다.

먼저, 우리는 IronPDF를 사용하여 PDF에서 텍스트를 추출한 다음, 추출된 텍스트에서 특정 부분을 찾기 위해 이전에 배우게 된 Find 또는 FindAll 메소드를 사용할 수 있습니다.

using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        // Load and extract text from a PDF document
        PdfDocument pdf = PdfDocument.FromFile(@"C:\Users\Administrator\Desktop\bike.pdf");
        string pdfText = pdf.ExtractAllText();

        // Split the extracted text into lines
        List<string> pdfLines = pdfText.Split('\n').ToList();

        // Define a predicate to find lines that contain a specific text
        Predicate<string> findChainRingPredicate = (string line) => { return line.Contains("Chain Ring ID"); };
        
        // Use FindAll to get all lines containing the specified text
        List<string> chainRingLines = pdfLines.FindAll(findChainRingPredicate);

        // Print the count and content of each found line
        Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':");
        foreach (string line in chainRingLines)
        {
            Console.WriteLine(line);
        }
    }
}

이 코드에서 우리는 PDF를 로드하고 텍스트를 추출한 후 라인으로 나누고 'Chain Ring ID'를 언급하는 모든 라인을 찾기 위해 FindAll를 사용하였습니다.

VB.NET에서 PDF 파일을 보는 방법: 그림 1

이것은 실무적 시나리오에서 IronPDF와 함께 Find 메소드를 사용하는 기본적인 예시입니다. C#의 유틸리티와 강력한 라이브러리를 함께 사용하여 프로그래밍 작업을 보다 쉬고 효율적으로 만드는 방법을 보여줍니다.

결론

이 튜토리얼에서 우리는 C# Find 메소드와 그 관련된 FindIndex, FindLastIndex, FindAll을 깊이 탐구했습니다. 그들의 사용법을 탐구하고 몇 가지 코드 예제를 살펴보고 가장 효과적인 상황을 찾아냈습니다.

또한 IronPDF 라이브러리를 사용한 PDF 조작의 세계로 들어갔습니다. 마찬가지로, 우리는 PDF 문서 내에서 콘텐츠를 추출하고 검색하기 위한 Find 메소드 지식의 실용적인 응용 예를 보았습니다.

IronPDF는 무료 IronPDF의 체험판을 제공하여 기능을 탐색하고 C# 프로젝트에 어떻게 도움이 될 수 있는지 확인할 수 있는 훌륭한 기회를 제공합니다. 체험판 사용 후 IronPDF를 계속 사용하기로 결정하면, 라이선스는 $999부터 시작합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.