읽기 전용 필드
readonly 키워드를 사용해서 읽기 전용 필드를 만들 수 있다. 읽기 전용 필드는 클래스나 구조체의 멤버로만 사용할 수 있으며, 생성자를 통해서
한 번만 값이 정해지고 읽기만 가능하여 변경할 수 없다. 만약 생성자가 아닌 곳에서 읽기 전용 필드를 변경하려 하면 컴파일 에러가 발생한다.
값이 한번 정해지면 다시 변경할 수 없는 const와 비슷하다. 하지만 const와 readonly는 분명히 다르다.
const는 선언 시에만 초기화 할 수 있고 readonly는 선언 시 또는 생성자에서 초기화할 수 있다.
const는 컴파일 시 상수 값이 코드에 직접 삽입되고 readonly는 런타임 시 값이 메모리에 저장된다.
구조체와 클래스
구조체와 클래스의 가장 큰 차이점은 구조체는 값 타입(Value Type) / 클래스는 참조 타입(Reference Type) 에 있다.
| 구분 | 클래스 | 구조체 |
|---|---|---|
| 타입 | 참조 타입 (Reference Type) | 값 타입 (Value Type) |
| 메모리 할당 | 힙 (Heap) | 스택 (Stack) |
| 기본 값 | null | 모든 필드가 기본 값으로 초기화됨 |
| 상속 | 지원 | 지원하지 않음 |
| 인터페이스 구현 | 지원 | 지원 |
| 생성자 | 기본 생성자 및 사용자 정의 생성자 가능 | 모든 필드를 초기화하는 생성자 필요 |
| 파괴자 | 지원 | 지원하지 않음 |
| 가비지 컬렉션 | 가비지 컬렉터에 의해 관리됨 | 가비지 컬렉션 없음 |
| 주된 사용 사례 | 복잡한 데이터 구조, 상속이 필요한 경우 | 작은 데이터 구조, 간단한 경우, 메모리 효율성 중시 |