[C#] List.Clear() vs List = null

2023. 1. 30. 14:34C#/C#에 대한 다양한 공부

clear와 null 대입은 그 의미가 다릅니다.

clear는 다음에 그 객체를 재사용할 수 있다는 의미가 되고요, null대입은 그 List 자체를 날리겠다는 의미니깐요.
List<object> 안에 3000개를 넣었다면 C++로 치자면 vector에 reserve(3000); resize(3000); 을 호출해 준 상황과 유사한 메모리 상태라고 생각됩니다. 여기에 null대입을 하면 GC는 List가 확보하고 있는 메모리와, 그 안의 구성요소 모두를 GC 대상으로 설정하겠죠.
Clear를 호출한 경우라면 reserve(3000)은 남아있는 상태에서 capacity는 변동이 없을겁니다. 안의 구성요소들은 GC대상으로 설정될 수 있겠네요.
 
뿐만 아니라 GC는 즉각적이지 않습니다. 따라서 Clear뒤에 바로 null대입하는건 GC입장에서는 큰 차이가 없을 가능성이 높다고 보여지네요. 의미없을 정도로 아주 근소하게 후자(바로 null대입)가 나을수도 있겠는데? 하는 생각이 듭니다.
 
C#에서 중요한건 코드 작성자의 의도라고 생각합니다. Clear 메서드 호출은 '이 List가 비워지고 메모리 영역을 재사용할거야'하는 느낌을 주고, null대입은 '절때 사용하지 않을거야.' 의 느낌이 강합니다.
만약 코드 위에서 List를 선언하고, 코드의 중간 임의 위치에서 null대입하는 방식으로 짠다면 코드가 조금만 길어져도 헬일 가능성이 다분하기때문에 추천드리긴 어려워보이네요.

https://answers.unity.com/questions/1129002/arrarys-difference-between-clear-and-null.html
http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&no=5004

 

 

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

[C#] Find() vs FirstOrDefault()  (1) 2023.09.05
.Any()  (0) 2023.09.05
[C#] ToList(), List를 ToList() 한다?  (0) 2023.01.06
객체 지향 프로그래밍이란, SOLID  (0) 2022.08.17
C# GC(Garbage Collector) 가비지 컬렉터  (0) 2022.08.17