클래스와 struct의 가장 본질적인 차이점은 클래스가 참조 타입이고 struct는 값 타입이며, 메모리 내 할당이 다르다는 점입니다.
계급이란 무엇인가?
클래스는 객체지향 프로그래밍에서 기본적인 개념으로, 일반적으로 필드, 속성, 메서드, 속성, 구성자, 인덱서, 연산자 등을 포함하는 맞춤형 자료구조의 한 종류입니다. .NET에서는 모든 클래스가 궁극적으로 System.Object 클래스에서 상속받기 때문에, 참조 타입이 됩니다. 즉, 클래스의 인스턴스를 새로 만들면 관리 힙 내 그 인스턴스의 주소가 스택에 저장되고, 인스턴스의 값이 관리 힙에 저장됩니다.
구조체란 무엇인가요?
구조체는 관련 변수들의 집합을 하나의 변수 엔티티로 조직하는 데 사용되는 값 유형입니다. 모든 구조체는 System.ValueType 클래스에서 상속받아 값 유형입니다. 즉, 구조체 인스턴스는 스레드가 할당된 스택에서 생성되며, 값 자체를 저장합니다. 따라서 struct를 사용할 때는 int와 char 같은 기본 타입 클래스로 처리할 수 있습니다.
1. 클래스는 참조 타입이고, structs는 값 타입입니다
클래스는 참조 타입이므로 클래스는 null로 설정할 수 있습니다. 하지만 struct는 값 타입이기 때문에 null로 만들 수 없습니다.
2. 클래스를 인스턴스화하면 힙 위에 생성됩니다. 그리고 구조체를 인스턴스화하는데, 이 구조체는 스택 위에 생성됩니다
3. 클래스 인스턴스에 대한 참조를 사용하고 있습니다. 그리고 구조체에 대한 참조를 사용하지 않고 있습니다. (대신 직접 사용하세요)
4. 메서드에 대해 클래스를 인자로 전달할 때, 참조를 전달합니다. struct는 참조가 아니라 값을 전달합니다.
5. 구조체는 초기화자를 가질 수 없지만, 클래스는 초기화자를 가질 수 있습니다.
6. 클래스는 명확한 매개변수 없는 구성자를 가질 수 있지만, 구조체는 가질 수 없습니다
7. 새 키워드는 클래스를 사용하기 전에 인스턴스화되어야 하며, 구조체는 이를 필요로 하지 않습니다
8. 클래스는 상속과 다형성을 지원하지만, Struct는 그렇지 않습니다. 참고: 하지만 Struct는 클래스처럼 인터페이스를 구현할 수 있습니다
9. Struct는 상속을 지원하지 않으므로, 그 구성원들은 보호되거나 보호된 내부로 수정할 수 없습니다
10. 클래스의 생성자는 모든 필드를 초기화할 필요가 없으며, Struct의 생성자는 모든 필드를 초기화해야 합니다
11. 클래스는 디스트럭터를 정의할 수 있지만, 스트럭처는 정의할 수 없다
12. 클래스는 크고 복잡한 데이터에 적합하며, Struct는 종종 일부 데이터의 조합으로 사용되는 새로운 타입에 적합합니다.
적용 가능한 경우: Struct는 성능 측면에서 이점이 있고, Class는 객체지향 확장 측면에서 장점이 있습니다.
기본 데이터 저장소에 사용되는 타입은 Struct 타입으로, 애플리케이션 동작을 정의하는 타입은 Class로 설계됩니다. 이 유형의 향후 적용이 확실하지 않다면 Class를 사용하는 것이 좋습니다. |