공부/C#

C#에서의 클래스(Class)와 구조체(Struct)의 차이점

셩잇님 2023. 3. 4. 23:13
반응형

 

 

C#에서 클래스와 구조체는 모두 데이터와 동작을 캡슐화하는 사용자 지정 데이터 유형을 정의하는 데 사용됩니다. 하지만 둘 사이에는 몇 가지 주요 차이점이 있습니다.

상속: 클래스는 다른 클래스에서 상속할 수 있지만 구조체는 상속할 수 없습니다. 즉, 클래스는 파생 클래스를 생성하기 위한 베이스 클래스로 사용할 수 있지만 구조체는 하나의 독립된 데이터 구조를 정의하는 데만 사용할 수 있습니다.

참조 유형과 값 유형: 클래스는 참조 유형으로, 클래스의 객체가 생성될 때 해당 객체에 대한 참조만 메모리에 저장됩니다. 반면 구조체는 값 유형으로, 구조체 유형의 변수가 생성되면 전체 데이터가 메모리에 저장됩니다. 이는 메모리 사용량과 성능에 영향을 미칠 수 있습니다.

기본 초기화: 클래스가 인스턴스화되면 모든 멤버 변수가 기본값으로 초기화되며, 참조 유형의 경우 null, 값 유형의 경우 0 또는 false입니다. 구조체가 인스턴스화되면 모든 멤버 변수는 기본값(기본 유형의 기본값)으로 초기화됩니다.

접근성: 기본적으로 클래스의 멤버는 비공개인 반면 구조체의 멤버는 공개입니다. 즉, 클래스의 데이터와 동작은 공용 메서드와 프로퍼티를 통해서만 접근할 수 있는 반면 구조체의 데이터와 동작은 직접 접근할 수 있습니다.

박싱과 언박싱: 구조체는 값 유형이므로 참조 유형의 변수에 할당될 때 "박싱"될 수 있습니다. 박싱은 힙에 새 객체를 생성하고 구조체의 값을 복사하는 작업을 포함합니다. 이는 메모리 사용량과 성능 측면에서 비용이 많이 드는 작업일 수 있습니다.

요약하면, C#에서 클래스와 구조체의 주요 차이점은 클래스는 데이터를 참조하여 객체를 생성하는 데 상속 및 사용할 수 있는 참조 유형인 반면, 구조체는 메모리에 직접 저장된 데이터로 자체 포함된 데이터 구조를 정의하는 값 유형이라는 점입니다. 클래스와 구조체 중 어떤 것을 사용할지는 프로그램의 특정 요구 사항과 캡슐화되는 데이터의 특성에 따라 달라집니다.

 

 

반응형