멋쟁이사자처럼/유니티 게임 개발 3기

[멋쟁이사자처럼 부트캠프 TIL 회고] 유니티 게임 개발 3기 13일차

MaterialStone 2024. 12. 5. 20:49
namespace UnityGameDevelopment.Day13 {
    public class Outline {
    	public static string Chapter1 = "LINQ";
    }
}

 

 

1. LINQ

LINQ

LINQ(Language INtegrated Query)란 질의하여 데이터 집합에서 원하는 데이터를 빠르고 편리하게 추출하는 방식입니다. LINQ는 C# 3.0부터 추가된 문법이며, 가독성이 좋고 유지 보수하기 좋습니다.


 

질의 방식

LINQ는 쿼리 구문과 메서드 구문이 있습니다.

쿼리 구문은 SQL과 비슷한 문법 키워드로 질의하여 데이터를 추출할 수 있습니다. 메서드 구문은 메서드 호출로 데이터를 추출할 수 있게 합니다.

 

구문

구문

from은 어떤 데이터에서 원하는 값을 추출할 건지를 설정할 수 있고, where은 원하는 값을 추출하기 위한 조건을 설정합니다. select는 데이터에서 어떤 항목을 추출할 건지를 설정합니다.

 

예제

int[] numbers = new int[10];

for (int i = 0; i < numbers.Length; i++)
{
    numbers[i] = Random.Range(0, 100);
}

var methodSyntaxResult = numbers
    .Where(number => number % 2 == 0)
    .OrderBy(number => number)
    .Select(number => number);

var querySyntaxResult = from number in numbers
    where number % 2 == 0
    orderby number
    select number;

 

numbers를 랜덤하게 초기화합니다. 여기서 짝수를 뽑아 정렬하는 예제입니다.


실습 및 응용

▶ LINQ 집계 함수 사용해보기

int[] numbers = new int[10];

for (int i = 0; i < numbers.Length; i++)
{
    numbers[i] = Random.Range(0, 100);
}

Debug.Log(numbers.Count());

foreach (var number in numbers)
{
	Debug.Log(number);
}

Debug.Log(numbers.Sum());
Debug.Log(numbers.Average());
Debug.Log(numbers.Min());
Debug.Log(numbers.Max());

 

Count 함수는 배열의 요소 수를 반환합니다.

Sum, Average, Min, Max 함수는 각각 배열 요소의 합, 평균, 최소, 최대를 반환합니다.

 

▶ LINQ 집합 연산 함수 사용해보기

int[] numbers1 = new int[10];
int[] numbers2 = new int[10];

for (int i = 0; i < numbers1.Length; i++)
{
    numbers1[i] = Random.Range(0, 100);
}
for (int i = 0; i < numbers2.Length; i++)
{
    numbers2[i] = Random.Range(0, 100);
}

PrintEnumerable(numbers1);
PrintEnumerable(numbers2);

PrintEnumerable(numbers1.Union(numbers2));
PrintEnumerable(numbers1.Intersect(numbers2));
PrintEnumerable(numbers1.Except(numbers2));
PrintEnumerable(numbers1.Distinct());
PrintEnumerable(numbers2.Distinct());

/*
void PrintEnumerable(IEnumerable enumerable)
{
    string result = "";

    foreach (var item in enumerable)
    {
        result += $"{item}, ";
    }

    Debug.Log(result);
}
*/

 

Union 함수는 두 배열을 합집합한 결과를 반환합니다.

Intersect 함수는 두 배열을 교집합한 결과를 반환합니다.

Except 함수는 두 배열을 차집합한 결과를 반환합니다.

Distinct 함수는 동일한 값을 가진 중복 요소가 없도록 만듭니다.