IList<T>

2025. 10. 5. 14:26·⭐C Sharp/00. 문법

List 안에 있는 내용을 피셔 에이츠를 이용해 셔플하고 싶었다.

그래서 Util 이란 Class 를 하나 생성해서 따로 관리하려고 한다.

private static void shuffle<T>(??? list)

그런데 매개변수로 List<T> 을 적게되면,

예시로 List<string> 을 적게되면 딱 List<string> 타입만 받을수 있고

string[ ] (배열) 같은건 받을수 없게 되는데, 

다른 것도 받고 싶으면 어떻게 입력해야 되지?

 

 

 

IList<T>

IList<T> 는 C# 의 제네릭 컬렉션 인터페이스 중 하나
인덱스로 접근 가능한 리스트형 자료구조의 표준 규약 ( 약속 )을 정의한 인터페이스

즉, List<T> , T[ ], OvservableColloction<T> 같은 리스트 계열 클래스들이

이 인터페이스를 구현 ( implement )해서 동일한 방식으로 다룰수 있게 된다.

 

 

문법

using System.Collections.Generic;

// 선언
IList<T> 변수명;

IList<int> numbers = new List<int>();

<T>는 제네릭 타입 매개변수

IList<string> , IList<float> , IList<myClass> 처럼 어떤 타입이든 가능하다.

 

 

예시 코드

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // IList 인터페이스로 List 인스턴스를 참조
        IList<string> fruits = new List<string>();

        // 데이터 추가
        fruits.Add("Apple");
        fruits.Add("Banana");
        fruits.Add("Cherry");

        // 인덱스로 접근
        Console.WriteLine(fruits[0]); // Apple

        // 요소 수정
        fruits[1] = "Blueberry";

        // 반복문 출력
        for (int i = 0; i < fruits.Count; i++)
            Console.WriteLine($"{i}: {fruits[i]}");
    }
}

 

 

 

주의할 점

  • IList 는 인터페이스라 인스턴스 생성 불가
    └ 반드시 구현체 사용해야한다. ( 예: new List<int>() )
  • IList 는 기능이 제한적이다
    └ List 고유 기능 ( sort(), Reverse() 등 ) 은 사용 불가
  • IList 는 약속이므로 구현체마다 내부 동작이 다를수 있다
  • 매개변수로 받을 때 유용하지만 반환 타입으로는 신중하게 사용 ( 반환 시 구체 타입 ( List<T> )을 명시하는게 나을수 있다

 

 

헷갈리는 점

IList<string> fruits = new List<string>(); 

List<string> fruits = new List<string>();

▲기능적으로는 차이점이 없는걸?

겉으로 보면 똑같이 작동하지만 왜 둘다 존재할까?

 

두 변수 다 Add , Remove , Count , Index 접근 등 다 된다.

지금 당장 사용할 때는 차이가 없다.

이건 구체적인 타입 ( List ) 를 사용할지 , 아니면 상위 개념의 인터페이스 ( IList ) 를 사용할지의 차이이다.

 

 

 

타입 선언 방식의 목적이 다르다

선언 방식 의미
List<string> List만 사용한다. → List 고유 기능까지 마음껏 사용 가능
IList<string> List 처럼 동작하는 객체면 된다. 구체 타입은 몰라도 된다. → 유연한 코드 설계 가능

▲IList 는 범용적이고 , List 는 구체적이다.

 

 

비유

List<string> → 현대자동차 아반떼를 직접 운전하겠다.
IList<string> → 자동차라면 뭐든 상관없이 운전할 수 있다. 현대건 기아건 상관없다.
  • 지금은 아반떼 ( List ) 를 사용하고 있지만
  • 나중에 다른 자동차 ( string [ ] , BindingList 등 )로 바꿔도
    └ 인터페이스 타입으로 선언되어있으면 코드 수정 없이 바로 교체 가능

 

 

List 선언

List<string> fruits = new List<string>();
fruits.Add("Apple");
fruits.Sort();

Sort() , Reverse() 같은 List 전용 기능 사용 가능

하지만 타입을 바꿀 수 없다

 

 

 

IList 선언

IList<string> fruits = new List<string>();
fruits.Add("Apple");

IList 는 인터페이스라서 Sort() 정의 없다

대신 나중에 구현제를 교체하기 쉽다

 

 

항목 List<T> IList<T>
선언 목적 구체적인 리스트 사용 리스트 계열 전반 지원
기능 List 고유 기능 ( Sort , Reverse ) 사용 가능 인터페이스 공통 기능만 사용 가능
유연성 낮음 ( 타입 고정 ) 높음 ( 다른 구현제 교체 용이하다 )
사용 예시 단순 데이터 저장용 인터페이스 기반 설계 , DI , 테스트 코드

 

 

 

정리

List<T> 는 구체적인 구현체

IList<T> 는 리스트처럼 동작하는 타입의 약속

유연한 코드 설계를 위해 인터페이스로 선언하는 게 좋다.

 

 

 

참고 자료

https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.ilist?view=net-9.0

 

'⭐C Sharp > 00. 문법' 카테고리의 다른 글

goto 문법  (0) 2025.10.08
C# 콘솔 색상 제어 ( Console Color Control )  (0) 2025.10.06
생략 ( 언더바 " _ " )  (0) 2025.10.04
Console.Title  (0) 2025.10.02
명명된 매개변수 ( Named Parameters )  (0) 2025.09.29
'⭐C Sharp/00. 문법' 카테고리의 다른 글
  • goto 문법
  • C# 콘솔 색상 제어 ( Console Color Control )
  • 생략 ( 언더바 " _ " )
  • Console.Title
DevHoChan
DevHoChan
맨땅에서 시작하는 코딩 도전
  • DevHoChan
    Debugging Life
    DevHoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (374)
      • 🕹️Game Life (1)
      • 🖥️Computer Science (5)
      • 📖TIL (141)
        • 🔥Projects (16)
        • 💡DevTips (5)
        • 🤔발생한 문제와 해결 (5)
        • 🔮Unity Graphics (5)
        • 🎤Interview (3)
        • ✅CodingTest (9)
      • 🚀Game Release (4)
      • 🧊Unity Basic (58)
        • 📌용어 사전 (1)
        • 에디터&인터페이스 (3)
        • 디버그 (1)
        • 라이프사이클 (4)
        • 게임오브젝트 (4)
        • 프리팹 (1)
        • 오브젝트풀링 (4)
        • 애트리뷰트 (2)
        • 트랜스폼 (4)
        • 물리&충돌 (1)
        • 프레임&델타타임 (4)
        • 코루틴&이벤트 (7)
        • 수학&보정함수 (3)
        • 디자인패턴 (9)
        • UGUI (3)
        • 벡터 ( Vector ) (3)
        • 씬 ( Scene ) (2)
        • 데이터 관리 (2)
      • ⭐C Sharp (99)
        • 📌용어 사전 (1)
        • 📌문법 사전 (6)
        • 메모리 관리 (3)
        • 00. 문법 (17)
        • 01. 변수 (3)
        • 02. 자료형 (2)
        • 03. 연산자 (6)
        • 04. 조건문 (2)
        • 05. 반복문 (2)
        • 06. 배열 (3)
        • 07. 메서드(함수) (7)
        • 08. 열거형 (3)
        • 09. 구조체 (2)
        • 10. 참조 (2)
        • 11. 객체 지향 (11)
        • 12. 델리게이트 (3)
        • 13. 디자인 패턴 (7)
        • 14. LINQ (1)
        • 📂▼자료구조 (2)
        • 15-1. 제네릭 (3)
        • 15-2. 배열 (4)
        • 15-3. 리스트 (2)
        • 15-4. 스택과 큐 (2)
        • 15-5. 딕셔너리 해시테이블 (2)
        • 15-6. 트리와 그래프 (3)
      • 📊Algorithm (16)
        • BigO (2)
        • 정렬 (4)
        • 셔플 (2)
        • 탐색 (6)
        • 최적화 (1)
      • 📝Game Design (16)
      • 🤖​AI Tools (12)
        • AI 리뷰 분석 (6)
        • Player2 (0)
        • 3D 모델링 (1)
        • 2D 스프라이트 (0)
        • 이미지 (2)
        • 사운드 (1)
        • 동영상 (1)
        • 문서 (1)
      • 🌍Network (6)
      • 🌱Github (11)
        • 기본 개념 (7)
        • 명령어 (1)
        • 도구 활용 (1)
      • ⚙️Visual Studio (5)
        • 🔧설치 및 환경설정 (2)
        • ⌨️HotKey (1)
        • 🚨디버깅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    c#
    게임기획
    디자인패턴
    유니티
    기획
    csharp
    unity
    OOP
    자료형
    GitHub
    게임디자인
    객체지향
    메모리관리
    문법
    CodingTest
    til
    algorithm
    부트캠프
    gamedesign
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
DevHoChan
IList<T>
상단으로

티스토리툴바