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()
호출이 인스턴스화라고 이해할 수 있습니다.