[C#] ToList(), List를 ToList() 한다?

2023. 1. 6. 15:28C#/C#에 대한 다양한 공부

ToList()

ToList() 자체가 쉽게 생각한다면 리스트로 만든다로 이해할 수 있다. 예를 들어 array -> list로 변경하고자 할때 등.

그런데 이미 타입이 List인 녀석도 ToList()를 할 수 가 있다. 이게 왜 필요한가 싶었는데 최근에 궁금증이 해결되었다.

 

GetFilter().SetOriginItemList(_curList);
GetFilter().Apply(ref _curList);
GetSorter().Apply(ref _curList);

만약 위와 같은 코드가 있고, 이 위에서 _curList를 하나 만들었다고 가정해보자.

SetOriginItemList()는 필터를 아무것도 하지 않았을 상태의 모든 아이템의 리스트를 저장하는 OriginItemList를 만든다고 가정하고 Apply()함수를 통해 특정 조건에 만족하는 아이템만 리스트에 남겨두고 나머지는 없애는 코드를 작성했다고 가정해보자.

원래 _curList가 30개였고, 필터로 인해 _curList가 30 -> 20개가 되었다면, OriginItemList에도 영향을 받아 전체 리스트가 변경될 수 있다. 따라서 다음과 같이 ToList()를 해주면 _curList가 변하더라도 OriginItemList는 영향을 받지 않는다.

GetFilter().SetOriginItemList(_curList.ToList());
GetFilter().Apply(ref _curList);
GetSorter().Apply(ref _curList);

 

이는 복사와 관련이 있는데, 예를 들어

List<int> _list01 = new List<int>();
List<int> _list02 = _list01;

다음과 같은 경우에서 _list01의 값이 변하면 _list02도 변한다. 왜냐하면 참조 값만 넘겨주기 때문에 같은 곳을 참조하고 있는 두 리스트는 같이 영향을 받게 된다.

List<int> _list01 = new List<int>();
List<int> _list02 = _list01.ToList();

따라서 영향을 받지 않고 싶다면 위와 같이 ToList()를 사용하면 쉽게 복사할 수 있다.

 

즉, List에서의 ToList()는 원본 리스트에 영향을 받지 않고, 값만 넘겨주고 싶다 할때 사용할 수 있다.

'C# > C#에 대한 다양한 공부' 카테고리의 다른 글

.Any()  (0) 2023.09.05
[C#] List.Clear() vs List = null  (0) 2023.01.30
객체 지향 프로그래밍이란, SOLID  (0) 2022.08.17
C# GC(Garbage Collector) 가비지 컬렉터  (0) 2022.08.17
시작하세요 C# 9.0 프로그래밍  (0) 2022.07.06