C#/C#에 대한 다양한 공부(19)
-
[C#] Find() vs FirstOrDefault()
C#에서 Find와 FirstOrDefault 메서드는 컬렉션에서 특정 조건을 만족하는 요소를 검색하는 데 사용됩니다. 그러나 이 두 메서드는 서로 다른 성능 특성을 가지고 있으며 사용 시 고려해야 할 사항이 있습니다. List.Find 메서드: List 클래스에서 사용할 수 있으며, 리스트에서 첫 번째로 조건을 만족하는 요소를 검색합니다. 선형 검색을 수행하며, 리스트의 처음부터 끝까지 요소를 하나씩 확인합니다. 성능은 리스트의 크기에 비례하므로 대규모 리스트에서는 성능 저하가 있을 수 있습니다. Enumerable.FirstOrDefault 메서드: IEnumerable 인터페이스를 구현하는 모든 컬렉션에서 사용할 수 있습니다. 조건을 만족하는 첫 번째 요소를 검색하며, 내부적으로 반복자를 사용하여 ..
2023.09.05 -
.Any()
IEnumerable를 구현하는 일반적인 컬렉션: 대부분의 컬렉션, 예를 들어 리스트(List), 배열(T[]) 등은 IEnumerable를 구현합니다. 이러한 컬렉션에서 Any 메서드는 컬렉션의 각 요소를 순차적으로 확인하면서 조건을 만족하는 요소를 찾으면 검색을 중지하고 true를 반환합니다. 이 경우, 선형 검색이 수행됩니다. ICollection를 구현하는 컬렉션: 일부 컬렉션, 예를 들어 HashSet, Dictionary 등은 ICollection를 구현하며, 이 인터페이스는 Count 속성을 가지고 있습니다. 이러한 컬렉션에서 Any 메서드는 컬렉션의 Count 속성을 확인하여 요소의 존재 여부를 결정합니다. 따라서 실제로 모든 요소를 순차적으로 확인하지 않고도 빠르게 true 또는 fals..
2023.09.05 -
[C#] List.Clear() vs List = null
clear와 null 대입은 그 의미가 다릅니다. clear는 다음에 그 객체를 재사용할 수 있다는 의미가 되고요, null대입은 그 List 자체를 날리겠다는 의미니깐요. List 안에 3000개를 넣었다면 C++로 치자면 vector에 reserve(3000); resize(3000); 을 호출해 준 상황과 유사한 메모리 상태라고 생각됩니다. 여기에 null대입을 하면 GC는 List가 확보하고 있는 메모리와, 그 안의 구성요소 모두를 GC 대상으로 설정하겠죠. Clear를 호출한 경우라면 reserve(3000)은 남아있는 상태에서 capacity는 변동이 없을겁니다. 안의 구성요소들은 GC대상으로 설정될 수 있겠네요. 뿐만 아니라 GC는 즉각적이지 않습니다. 따라서 Clear뒤에 바로 null대입..
2023.01.30 -
[C#] ToList(), List를 ToList() 한다?
ToList() ToList() 자체가 쉽게 생각한다면 리스트로 만든다로 이해할 수 있다. 예를 들어 array -> list로 변경하고자 할때 등. 그런데 이미 타입이 List인 녀석도 ToList()를 할 수 가 있다. 이게 왜 필요한가 싶었는데 최근에 궁금증이 해결되었다. GetFilter().SetOriginItemList(_curList); GetFilter().Apply(ref _curList); GetSorter().Apply(ref _curList); 만약 위와 같은 코드가 있고, 이 위에서 _curList를 하나 만들었다고 가정해보자. SetOriginItemList()는 필터를 아무것도 하지 않았을 상태의 모든 아이템의 리스트를 저장하는 OriginItemList를 만든다고 가정하고 A..
2023.01.06 -
객체 지향 프로그래밍이란, SOLID
[객체 지향] 객체 지향 프로그래밍이란?(OPP : Object Oriented Programming) 객체 지향 프로그래밍은 컴퓨터 프로그래밍 페러다임 중 하나로 프로그래밍에서 필요한 데이터를 추상화시켜 상태의 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 말 그대로 객체 지향은 기능이 아닌 객체가 중심이 되어 "누가 어떤 일을 할 것인가?" 가 핵심이 된다. 즉 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다. 객체 지향에 대한 이해를 위해 절차 지향 프로그래밍과 비교하면서 설명하겠다. 객체 지향 프로그래밍은 객체가 중심이 된다면 절차 지향 프로그래밍은 무엇이 중심이 될까? 절차 지향은 기능 중심으로 바라보는 방식으로 "무엇을..
2022.08.17 -
C# GC(Garbage Collector) 가비지 컬렉터
[GC(Garbage Collector)] C#에서 객체 생성 시 메모리 할당 방식 -> 첫 영역부터 차곡차곡.. -> 메모리 할당이 가능한 영역을 찾는 과정이 없기 때문에 속도가 빠름 *C#에서 GC에 의한 메모리 해제 방식 GC Root 라는 것이 있다. 루트는 힙에 있는 객체를 가리키는 참조를 말한다. -> 여기서 a가 루트 루트 목록을 순회하면서 루트가 참조하는 힙 객체와 관계를 조사한다. 어떤 루트와도 관계가 없다면 쓰레기로 간주한다 쓰레기 객체가 차지하는 메모리는 해제한다. 남은 객체들은 다시 비어있는 공간에 재배치 시켜준다. 위 과정이 GC의 큰 틀이다. C#은 메모리 관리를 용이하게 하기 위해 세대별 GC를 지원한다. 그 이유는 아래와 같다. GC는 파편화를 방지하기 위해 메모리를 압축하는..
2022.08.17