프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 3.12 First메서드 VS Take메서드

Victory_HA 2022. 3. 31. 22:32

1. First메서드 와 Take메서드

  • First() : 1번째 요소를 가져오는 메서드
  • Take(n) : n 번째 요소를 포함한 시퀀스(sequence)를 가져오는 메서드

2.First메서드와 Take메서드 차이점

  • First메서드는 1번째 값을 가져오므로, 나중에 배열의 값을 변경해도 결과는 그대로입니다.
    • 예제에서 numbers.First()를 호출하는 순간 1번째 값을 가져옵니다.
  • Take메서드는 1번째 값과 시퀀스를 가져옵니다.
    • 예제에서 numbers.Take(1)을 호출하는 순간 1번째 값을 가져올 수 있는 권한시퀀스를 가져옵니다.
    • 실제로 값을 가져오는 건 ElementAt() 입니다.
    • ElementAt()호출 전에 배열 값의 변경이 이루어져서 변경된 값이 출력됩니다.

2.1 사용예제

class Program
{
  static void Main(string[] args)
  {
    Example_First();
    Example_Take();
  }

  static void Example_First()
  {
    int[] numbers = { 1, 2, 3, 4, 5 };
    var firstNumber = numbers.First();
    numbers[0] = 0;
    Console.WriteLine($"First() : {firstNumber}");
    Console.ReadKey();
  }

  static void Example_Take()
  {
    int[] numbers = { 1, 2, 3, 4, 5 };
    var firstNumber = numbers.Take(1);
    numbers[0] = 0;
    Console.WriteLine($"Take() : {firstNumber.ElementAt(0)}");
    Console.ReadKey();
  }
}

2.2 실행 결과

2.3 Take메서드의 예외발생

  • Take(2)numbers배열의 2번째 요소를 호출할 수 있습니다.
  • ElementAt(0)는 1번째 요소의 값을 가져오려고 시도하면 System.ArgumentOutOfRangeException예외 발생합니다.
    static void Example_Take()
    {
      int[] numbers = { 1, 2, 3, 4, 5 };
      var secondNumber = numbers.Take(2);
      Console.WriteLine($"Take() : {secondNumber.ElementAt(0)}");
      Console.ReadKey();
    }

3. 인스턴스화란?

  • 인스턴스화는 클래스 내의 객체에 대해 특정한 변형을 정의하고, 이름을 붙인 다음, 그것을 물리적인 어떤 장소에 위치시키는 등의 작업을 통해, 인스턴스를 만드는 것을 의미한다.
  • LINQ 사용에서 인스턴스화란 결과를 직접 가져오는 기능을 말합니다.
  • LINQ 메서드는 지연실행과 인스턴스화가 있습니다.
    • 지연실행 : 쿼리를 객체로 가져오기 위한 기능
    • 인스턴스화 : 결과를 직접 가져오는 기능
  • Take() 호출이 지연실행이라 할 수 있고, ElementAt()호출이 인스턴스화라고 이해할 수 있습니다.