C#에서는 클래스(Class)와 구조체(Struct) 모두 사용자 지정 데이터 유형을 정의하는 데 사용됩니다. 그러나 둘 사이에는 몇 가지 주요 차이점이 있습니다:
상속: 클래스(Class)는 다른 클래스로부터 프로퍼티와 메서드를 상속할 수 있는 반면, 구조체(Struct)는 다른 구조체나 클래스로부터 상속할 수 없습니다. 즉, 클래스(Class)는 복잡한 상속 계층 구조와 다형성 동작을 구현하는 데 사용할 수 있는 반면 구조체(Struct)는 일반적으로 더 간단하고 가벼운 데이터 구조에 사용됩니다.
메모리 할당: 클래스(Class)의 인스턴스는 힙에 할당되는 반면 구조체(Struct)의 인스턴스는 스택에 할당됩니다. 즉, 클래스(Class)는 메모리 사용량과 가비지 컬렉션 측면에서 오버헤드가 더 높지만 유연하고 동적으로 크기를 조정할 수 있습니다.
기본 생성자: 클래스(Class)에는 항상 기본 생성자가 있으며, 이 생성자는 모든 필드에 기본값을 사용하여 클래스의 인스턴스를 생성하는 데 사용됩니다. 반면에 구조체(Struct)에는 기본 생성자가 있을 수도 있고 없을 수도 있으며, 기본 생성자가 없는 경우 필드를 명시적으로 초기화해야 합니다.
시맨틱 복사: 클래스(Class)가 메서드의 매개변수로 전달되거나 변수에 할당되면 객체에 대한 참조만 전달되며, 객체에 대한 수정 사항은 해당 객체에 대한 모든 참조에 반영됩니다. 반면 구조체(Struct)는 값으로 전달되므로 구조체의 복사본이 생성되고 복사본에 대한 수정 사항은 원본 구조체에 영향을 미치지 않습니다.
초기화: 클래스(Class)에는 정적 필드를 초기화하는 데 사용되는 정적 생성자와 인스턴스 필드를 초기화하는 데 사용되는 인스턴스 생성자가 있을 수 있습니다. 반면에 구조체(Struct)는 인스턴스 생성자만 가질 수 있습니다.
일반적으로 클래스(Class)는 구조체(Struct)보다 더 다재다능하고 유연하며, 더 복잡한 데이터 구조와 객체 지향 설계에 사용됩니다. 반면에 구조체(Struct)는 더 간단하고 가벼우며 간단한 데이터 저장이나 수학적 또는 기하학적 개념을 표현하는 데 자주 사용됩니다.
'공부 > C#' 카테고리의 다른 글
리플렉션(Reflection)이란? (0) | 2023.06.10 |
---|---|
람다식(Lambda)이란? (0) | 2023.06.10 |
평면과 구의 충돌을 어떻게 판단하는가? (0) | 2023.03.17 |
레이캐스트(Raycast)로 평면과 충돌했는지 어떻게 판단할가? (0) | 2023.03.17 |
평면과 한 점의 최단거리를 어떻게 구할까? (0) | 2023.03.17 |