카테고리 없음

🌟 C# List Pattern😋 🌟

minsoungdev 2026. 8. 15. 22:56

안녕하세요. 박민성입니다. ☺️

 

오늘은 C#의 List Pattern에 대해서 글을 쓰고자 합니다. 🤔

 

1. List Pattern이란?

List Pattern은 배열이나 리스트 같은 순차 데이터의 요소와 구조를 패턴으로 검사하는 기능입니다. 전에 작성했던 패턴 매칭의 한 종류입니다.

int[] numbers = { 1, 2, 3 };

if (numbers is [1, 2, 3])
{
    Debug.Log("일치");
}

여기서! [1, 2, 3]은 새로운 배열을 만드는 코드가 아닌 패턴입니다.

위 코드는 numbers가 정확히 1, 2, 3이라는 구조를 가지고 있는가요? 를 if로 검사하는 코드입니다.

 

2. 기본 사용법

컬렉션 is [패턴1, 패턴2, 패턴3]

 

이런 형태로 사용할 수 있습니다.

 

int[] numbers = { 10, 20, 30 };

if (numbers is [10, 20, 30])
{
    Debug.Log("같음");
}

각 위치를 순서대로 검사해.

index 0이 10인가요?, index 1 → 20인가요?, index 2 → 30인가요?

전부 맞으면 true입니다.

 

여기서 중요한 점은 배열의 길이도 같이 검사한다는 점입니다.

int[] numbers = { 1, 2, 3, 4 };

if (numbers is [1, 2, 3])
{
}

이 if문은 false가 나옵니다.

요소가 정확히 3개이고, 각각 1, 2, 3인지 검사하는 것입니다.

 

Microsoft 문서에서도 List Pattern을 시퀀스의 형태(shape)를 검사하는 패턴으로 설명합니다.

 

3. _ discard 사용하기

특정 위치의 값은 상관없다면 _를 사용할 수 있습니다.

int[] numbers = { 10, 999, 30 };

if (numbers is [10, _, 30])
{
    Debug.Log("일치");
}

여기서 _는 어떤 값이든 상관없음을 나타냅니다.

하지만.

여전히 요소 개수는 비교하는 것과 같아야 합니다.

 

4. .. Slice Pattern 사용하기

int[] numbers = { 1, 2, 3, 4, 5 };

if (numbers is [1, .., 5])
{
    Debug.Log("일치");
}

이런식으로 신기하게 작성할 수 있습니다.

이 코드의 뜻은

첫 번째 요소 = 1, 중간 = 몇 개든 가능, 마지막 요소 = 5 이라는 뜻입니다.

 

그렇기 때문에!

1, 5

1, 2, 5

1, 2, 3, 4, 5

이런 배열들이 true가 나오기 때문입니다.

모두가 첫 번째 요소가 1로 시작해서 중간은 상관없이 마지막 요소가 5로 끝납니다.

 

..는 여기서 Slice Pattern이라고 불립니다. 한 List Pattern 내부에서 slice pattern은 직접적으로 한 번만 사용할 수 있습니다.

 

전에 글로 작성했던 numbers[1..4] 배열 길이에 대한 ..은 현재 List Pattern에서 사용하는 ..과 다른 문법입니다.

 

5. 값뿐만 아니라 타입도 검사 가능

object[] values = { 10, "Sword" };

if (values is [int, string])
{
    Debug.Log("int와 string");
}

첫 번째 요소가 int, 두 번째 요소가 string인지 검사합니다.

 

🌟🌟🌟 여기서ㅇㄴㅁㅇㄴㅁㅇ 

여기서 중요!!

List Pattern은 패턴 검사와 동시에 값을 변수에 저장하여 사용할 수 있습니다.

if (values is [int damage, string weaponName])
{
    Debug.Log(damage);
    Debug.Log(weaponName);
}

var를 사용할 수도 있습니다.

 

6. 관계 패턴과 같이 사용하기

>, <, >=, <= 이런 비교 연산자를 사용할 수 있습니다.

int[] stats = { 100, 50 };

if (stats is [> 0, > 0])
{
    Debug.Log("둘 다 0보다 큼");
}
int[] numbers = { 10, 50, 90 };

if (numbers is [< 20, _, > 80])
{
    Debug.Log("조건 만족");
}

이렇게 List Pattern 안에서 다른 패턴을 조합할 수 있습니다. C#의 패턴들은 서로 조합해서 사용할 수 있습니다.

 

7. switch와도 사용 가능

List Pattern은 is에서만 사용하는 게 아닙니다.

string Check(int[] numbers)
{
    return numbers switch
    {
        [] => "비어있음",
        [0] => "0 하나",
        [1, 2] => "1과 2",
        [1, ..] => "1로 시작함",
        [.., 9] => "9로 끝남",
        _ => "기타"
    };
}

이런 식으로 배열의 구조에 따라 처리할 수도 있습니다.

 

 

오늘은 C#에 List Pattern에 대해서 알아보았습니다.

전에 소개했더 패턴 매칭과 이어지는 내용이 있었습니다.

방학이 얼마남지 않았습니다.... 8월 17일.... 다음주 월요일.... 기숙사에 들어갑니다... 

하지만!!!!! 저는 학교생활이 즐겁다고 생각하기에 큰 걱정은 없습니다 ㅎㅎ 😊

걱정이 좀 있긴 하지만...

 

오늘의 노래 추천은

BellyJay - MONTAGEM HIKARI 이라는 노래입니다.

제가 펑크 중에서 가장 좋아하는 곡입니다. 

요즘 추천할 곡이 점점 떨어져 나갑니다;

 

내일은 더욱 좋은 글을 써보도록 노력해보겠습니다. 

봐주셔서 감사합니다. ☺️