
System.Object 클래스를 상속받는다. 💛 C#의 데이터 자료형
GetType()Equals(Object)Equals(Object, Object)ReferenceEquals(Object, Object)ToString()GetHashCode()🩵 값 타입과 참조 타입
- 값 타입 (Value Type)
- 메모리의 스택 영역에 저장
- 복사시 실제 데이터가 복사되어 전달 (copy by value)
- 참조 타입 (Reference Type)
- 메모리의 힙 영역에 저장
- 변수의 선언만으론 오브젝트가 생성되지 않음
→new키워드를 통해 오브젝트를 생성하고 이를 각 변수가 참조- 복사시 데이터의 참조만 전달 (copy by reference)
→ 크기가 큰 데이터나 객체 지향 프로그래밍에서 주로 활용
🩵 메모리
- 스택 (Stack)
- 컴파일 타임에 할당
- 변수의 범위가 끝나면 자동으로 데이터 해제됨
- 데이터를 저장하고 검색하는데 효율적
- 힙 (Heap)
- 런타임에 동적으로 할당
- C#에서의 메모리 관리는 가비지 컬렉션에 의해 자동으로 이루어짐
- 데이터 할당 및 해제 과정에서 스택에 비해 큰 오버헤드
Boxing
Unboxing
🩵 오류
null을 unboxing할 경우NullReferenceException발생- 호환되지 않는 값 형식에 대한 참조를 unboxing할 경우
InvalidCastException발생
예시
int i = 123;
object o = i; // boxing
int j = (int)o; // unboxing

i를 오브젝트 타입의 개체 o에 할당o를 값 타입의 정수 변수 j로 변환