본문 바로가기
게임 개발(유니티)/멋쟁이 사자처럼 3기_회고록

[멋쟁이사자처럼 유니티 TIL] 2024_12_05(목) 강의 요약 및 정리(2)

by goraku97 2024. 12. 8.

LINQ

LINQ(Language Integrated Query)는 C#에서 데이터 쿼리 및 조작을 위한 강력한 기능.

Unity 게임 개발에서도 LINQ를 사용하여 코드를 더 간결하고 효율적으로 만들 수 있다.

 

LINQ의 주요 특징:

데이터 소스에 대한 통일된 쿼리 구문

컬렉션, 배열, XML 등 다양한 데이터 소스 지원

강력한 필터링, 정렬, 그룹화 기능

코드의 가독성과 유지보수성 향상

 

주요 Linq 메서드

 

var evenNumbers = numbers.Where(n => n % 2 == 0);

// Where 메서드를 사용해, 조건을 만족하는 요소들만 반환

    n => n % 2 == 은, 나머지가 0 이 나와야 하니까 n 은 2,4 와 같은 짝수만 가능.

   해당 요소들을 evenNumbers 에 반환

 

foreach (var number in evenNumbers) { Debug.Log(number); // 출력: 2, 4 }

//  evenNumbers의 각 요소(2와 4)를 하나씩 가져오고, 가져온 값은 number에 저장

    Log 에, 2 와 4 가 각각 출력됨.

 

 

var nameLengths = names.Select(name => name.Length);

// Select 메서드르 사용해, 기존 요소를 다른 데이터로 변경

  name => name.Length 이므로, Alice 는 5, Bob은 3, Charlie 은 7로 변경하여

  nameLengths 에 해당 요소들을 반환.

 

foreach (var length in nameLengths) { Debug.Log(length); // 출력: 5, 3, 7 }

// nameLengths 의 각 요소들(5, 3, 7) 을 하나씩 가져오고, 가져온 값들을 length 에 저장.

   Log 에, 5, 3, 7 이 각각 출력됨.

 

 

 

Any 함수에서 조건을 하나라도 만족하면, true. 하나도 만족하지 못했다면 false  를 반환.

 

var sortedNumbers = numbers.OrderBy(n => n);

// OrderBy 함수를 사용했으므로, 각 요소들을 오름차순 으로 정리

   정리한 요소들을 sortedNumbers 변수에 할당.

 

foreach (var number in sortedNumbers) { Debug.Log(number); // 출력: 1, 1, 3, 4, 5 }

// sortedNumbers 의 각 요소들(1, 1, 3, 4, 5) 을  하나씩 가져오고, number 에 저장.

   Log 에는 1, 1, 3, 4, 5 가 출력됨.

 

 


LINQ 사용 예시(2024_12_05(목) 강의 요약 및 정리(1) 참고

 

 

var linqFilter =  monsters.Where(e => e is { name: "A", health: >= 30 })

// Where 메서드를 사용하여, 조건에 맞는 요소들만 반환

  e is { name: "A", health: >= 30 }

  // is 를 사용하여, 패턴 매칭을 진행

    name A 이고, health 30 이상인 요소들만 선택

new MonsterTest() { name = "A", health = 100 },
new MonsterTest() { name = "A", health = 30 },

   그 후에 linqFilter 에 할당.

 

.OrderByDescending(e => e.health)

// OrderByDescending 함수를 사용해서. 컬랙션을 내림차순으로 정리.

  e => e.health 이므로, health 값이 100인 객체가 먼저 오고, 30인 객체가 뒤에 옴.

 

  • { name: "A", health: 100 }
  • { name: "A", health: 30 }

.ToList()

ToList 메서드를 사용해서, 지연실행 하는 메서드를, 즉시 실행하고 리스트 타입으로 만듬

(해당 메서드가 없으면 오류가 생길 가능성이 있음)

 

foreach (var monster in linqFilter)
        {
            Debug.Log($" Name : {monster.name}, Health : {monster.health}");
        }

// linqFilter 의 각 요소들( name: "A", health: 100,  name: "A", health: 30) 을 가져오고

  monster 에 할당.

  Log 에는 " Name : A, Health : 100" , "Name : A, Health : 30" 이 각 각 출력됨