1. 공통점
- Class와 Structure는 둘 다 데이터를 저장하고, 데이터를 처리하는 로직을 포함할 수 있는 프로그래밍 언어의 데이터 구조입니다.
- 둘 다 멤버 변수(필드), 메서드, 생성자 등을 가질 수 있습니다.
- 객체 지향 프로그래밍(OOP)에서 객체를 정의하기 위해 사용됩니다.
2. 차이점
타입 | class | structure |
기본 설계 목적 | 참조형(Reference Type) | 값형(Value Type) |
메모리 할당 방식 | 힙(Heap) | 스택(Stack) (일반적으로) |
상속 | 상속 가능 | 상속 불가 |
기본 값 전달 방식 | 참조 전달 | 값 복사 전달 |
기본 생성자 지원 | 기본 생성자가 있음 | 명시적으로 생성자 작성 필요 |
디폴트 값 | null (참조 없음) | 초기화되지 않은 상태에서는 사용 불가 |
GC의 영향 | 가비지 컬렉터가 메모리 관리 | 자동으로 스택에서 제거됨 |
3. 주요 차이점에 대한 상세 설명
- 참조형 vs 값형
- Class는 참조형이기 때문에 변수에 클래스 인스턴스를 할당하면 메모리의 주소를 참조합니다.
→ 한 변수가 클래스를 수정하면 참조하는 모든 곳에 영향을 미칩니다. - Structure는 값형이기 때문에 변수를 다른 변수에 할당하거나 함수로 전달할 때 데이터 자체가 복사됩니다.
→ 원본 데이터에 영향을 주지 않습니다.
- Class는 참조형이기 때문에 변수에 클래스 인스턴스를 할당하면 메모리의 주소를 참조합니다.
- 메모리 관리
- Class는 힙에 저장되므로 런타임 중 동적으로 메모리를 할당합니다.
→ 메모리 할당 및 관리에 추가적인 비용이 발생할 수 있습니다. - Structure는 일반적으로 스택에 저장되며, 함수 호출이 끝나면 자동으로 제거됩니다.
→ 가볍고 빠른 성능을 요구하는 경우 적합합니다.
- Class는 힙에 저장되므로 런타임 중 동적으로 메모리를 할당합니다.
- 상속
- Class는 상속을 지원해 코드 재사용성이 높습니다.
→ OOP 설계에서 다형성을 구현할 수 있습니다. - Structure는 상속을 지원하지 않습니다.
→ 단순 데이터 묶음에 적합합니다.
- Class는 상속을 지원해 코드 재사용성이 높습니다.
- 용도 및 설계 목적
- Class는 복잡한 객체 모델, 상속 관계, 다형성이 필요한 경우에 사용합니다.
- Structure는 단순 데이터 구조, 성능이 중요한 경우, 값형태의 데이터를 다룰 때 사용합니다.
예: Vector, Point, DateTime.
4. 사용 목적 및 예제
1. Class의 사용 목적
- 복잡한 객체 설계가 필요한 경우:
- 예: 사용자, 데이터베이스 연결, 네트워크 요청 등.
- 상속이나 다형성을 사용하는 경우:
public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal speaks");
}
}
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Dog barks");
}
}
2. Structure의 사용 목적
- 데이터가 가볍고 변경되지 않는 값일 때:
- 예: 좌표(Point), 색상(Color), 시간(TimeSpan).
- 성능이 중요한 경우(메모리 복사 비용이 낮음)
public struct Point {
public int X { get; set; }
public int Y { get; set; }
}
Point p1 = new Point { X = 10, Y = 20 };
Point p2 = p1; // 복사
p2.X = 30; // p1에는 영향을 미치지 않음
5. 요약
- Class는 복잡한 객체, 상속, 참조형 데이터를 다룰 때 사용.
- Structure는 단순 데이터, 가볍고 빠른 성능이 필요한 경우 사용.
- 설계 목표에 따라 Class와 Structure를 선택하는 것이 중요합니다.
→ 데이터의 불변성 여부, 상속 여부, 메모리 효율성을 고려합니다.
'TIL' 카테고리의 다른 글
자원 전쟁 (서버) 프로젝트 - 용광로 만들기 1탄 (0) | 2024.12.05 |
---|---|
C# .csv파일 변환 방법과 예시 (0) | 2024.11.26 |
자원 전쟁 프로젝트 ProtoBuf 구분 기준 (1) | 2024.11.15 |
Tower Defense Online Project 트러블 슈팅 - 5 (1) | 2024.11.12 |
Tower Defense Online Project 트러블 슈팅 - 4 (0) | 2024.11.12 |