값타입, 구조체, struct에 대해 필요성을 느꼈다.
예를 들어 물이라는 클래스가 있고, 이 물은 비즈니스 로직에서 섞일 예정이다.
그리고 우리는 이 물이 어디에서 흘러왔는지 알기 위해서 섞인 물들의 성분을 부모 물 필드에 가지고 있을 것이다.
이 때, 조상 물의 객체는 가장 마지막 자손이 수명을 다할 때까지 가비지 처리되지 않을 것이다.(아마 그렇겠지...?) 그럼 최악의 경우 너무 많은 객체가 한 번에 메모리에 올라와 사라지지 않을 수 있기 때문에 지식 저편에 있던 struct를 꺼내왔다.
예를 들어 이런 클래스가 있다고 하자
public class Person
{
String Name;
Person Parent1;
Person Parent2;
}
해당 클래스에서 최초의 부모 객체는 마지막 자손이 사라질 때까지 사라지지 않을 것이다. 그리고 최초의 부모와 자손 사이에 있는 객체들도 마찬가지다.
정확하게 실험하진 않았지만, 객체가 많아지고 무거운 객체일 수록 성능 저하를 초래할 수 있을 거라 예상했다.
그런데
객체가 메모리상에서만 존재하는 경우는 몰라도 내 경우에는 객체가 생겨날 때, DB에 저장한다.
그럼 굳이 자손 객체가 사라질 때까지 기다리지 않아도 값만 표현하거나, 식별자만 존재하면 됐는데, 그걸 해결해줄 수 있는게 c#의 구조체였다.
public struct Parent
{
String Name;
...
// 추가로 필요한 필드 및 식별자
}
해당 값타입을 사용한다면 객체를 참조할 필요 없이 필요한 데이터만 객체가 가지고 다닐 수 있도록 할 수 있다.
메모리에 올라오는 객체가 적어지기 때문에 성능 향상을 조금이나마 기대할 수 있을 거 같다.