Contents
접기
728x90
1. 기본 개념
C#을 공부하다 보면 class와 struct의 차이에 대해 혼란스러울 수 있다.
둘 다 데이터를 담는 틀이라는 점은 같지만 동작 방식과 사용 목적이 다르다.
이 글에서는 클래스와 구조체의 차이를 정리하고 언제 어떤 걸 사용하면 좋은지, 그리고 구조체의 한계점까지 알아보자.
🔹시작전 각각의 개념을 한번 더 복습해보자.
✅ 클래스란?
- 참조형(reference type)
- new 키워드로 인스턴스를 생성
- 힙(Heap) 메모리에 저장됨
- 변수에 객체의 참조(주소) 를 저장
- 상속, 다형성 등 객체 지향 프로그래밍(OOP) 특징을 활용할 수 있음
class Person {
public string Name;
public int Age;
}
✅ 구조체란?
- 값형(value type)
- new 없이도 사용 가능
- 스택(Stack) 메모리에 저장됨
- 변수에 값 자체를 저장
- 상속 불가능, 메서드 정의는 가능
- 간단하고 빠른 처리가 필요한 데이터 구조에 적합
struct Point {
public int X;
public int Y;
}
2. 클래스 vs 구조체 차이 정리
구분 | 클래스(class) | 구조체(struct) |
메모리 저장 | 힙 (Heap) | 스택 (Stack) |
타입 종류 | 참조형 (Reference Type) | 값형 (Value Type) |
생성 방식 | new로 인스턴스 생성 | new 없이도 사용 가능 |
상속 | 지원함 | 기본적으로 불가능 |
사용 목적 | 복잡한 객체 관리 | 가벼운 데이터 저장 |
기본 생성자 | 명시적 생성자 작성 가능 | 매개변수 없는 생성자 불가 |
3. 언제 클래스, 언제 구조체를 사용해야 할까?
📘구조체를 사용할 때
- 데이터 양이 적고, 단순한 값을 담을 때
- 값의 복사가 필요한 경우
- 변경이 거의 없는 데이터를 표현할 때
예: 좌표(Point), 색상(Color), 날짜(DateTime)
📔 클래스를 사용할 때
- 복잡한 동작과 상태가 있는 경우
- 상속, 다형성을 사용해야 할 경우
- 객체가 무겁고 자주 수정되며, 공유되어야 하는 경우
예: 사용자(User), 주문(Order), 차량(Car)
4. 구조체의 한계
구조체는 가볍고 빠르지만, 다음과 같은 제약이 있다.
- 상속 불가
구조체는 다른 구조체나 클래스를 상속할 수 없다. 다형성을 활용할 수 없기 때문에 유연성이 떨어진다. - 기본 생성자 작성 불가
매개변수가 없는 생성자는 직접 정의할 수 없다. 모든 필드를 초기화하려면 생성자를 따로 만들어야 한다. - 값 복사로 인한 성능 문제 가능
구조체가 크면, 복사할 때 오히려 성능이 떨어질 수 있다. 값이 자주 바뀌고, 크기가 크다면 클래스가 더 적합하다. - null 할당 불가 (기본형)
구조체는 기본적으로 null을 가질 수 없다. (nullable 구조체로 선언 시 가능: Point? pt = null;)
📖정리
✓ 클래스는 참조형으로, 동일한 객체를 여러 참조가 가리킬 수 있음
✓ 구조체는 값형으로, 복사 시 독립적인 사본이 생성됨
✓ 구조체는 가볍고 단순한 데이터에 적합, 클래스는 복잡한 객체 지향 설계에 적합
✓ 설계 목적과 데이터의 성격에 따라 적절히 선택하는 것이 중요함
✓ 구조체는 상속, 다형성을 사용할 수 없고 기본 생성자를 정의할 수 없다는 한계점이 있다.
✓ 상황에 따라 목적에 맞게 선택하는 것이 중요하다.
728x90
'C# > 클래스와 구조체' 카테고리의 다른 글
[C#] 상속(Inheritance) (0) | 2025.04.17 |
---|---|
[C#] 프로퍼티 (Property) (0) | 2025.04.17 |
[C#] 객체 (0) | 2025.04.17 |
[C#] 클래스 (0) | 2025.04.17 |
[C#] 구조체 (0) | 2025.04.17 |