TIL

Class와 Structure의 차이점 및 사용 목적

추운날_너를_기다리며 2024. 11. 26. 00:13

1. 공통점

  • ClassStructure는 둘 다 데이터를 저장하고, 데이터를 처리하는 로직을 포함할 수 있는 프로그래밍 언어의 데이터 구조입니다.
  • 둘 다 멤버 변수(필드), 메서드, 생성자 등을 가질 수 있습니다.
  • 객체 지향 프로그래밍(OOP)에서 객체를 정의하기 위해 사용됩니다.

2. 차이점

타입 class structure
기본 설계 목적 참조형(Reference Type) 값형(Value Type)
메모리 할당 방식 힙(Heap) 스택(Stack) (일반적으로)
상속 상속 가능 상속 불가
기본 값 전달 방식 참조 전달 값 복사 전달
기본 생성자 지원 기본 생성자가 있음 명시적으로 생성자 작성 필요
디폴트 값 null (참조 없음) 초기화되지 않은 상태에서는 사용 불가
GC의 영향 가비지 컬렉터가 메모리 관리 자동으로 스택에서 제거됨

 


3. 주요 차이점에 대한 상세 설명

  1. 참조형 vs 값형
    • Class는 참조형이기 때문에 변수에 클래스 인스턴스를 할당하면 메모리의 주소를 참조합니다.
      → 한 변수가 클래스를 수정하면 참조하는 모든 곳에 영향을 미칩니다.
    • Structure는 값형이기 때문에 변수를 다른 변수에 할당하거나 함수로 전달할 때 데이터 자체가 복사됩니다.
      → 원본 데이터에 영향을 주지 않습니다.
  2. 메모리 관리
    • Class는 힙에 저장되므로 런타임 중 동적으로 메모리를 할당합니다.
      → 메모리 할당 및 관리에 추가적인 비용이 발생할 수 있습니다.
    • Structure는 일반적으로 스택에 저장되며, 함수 호출이 끝나면 자동으로 제거됩니다.
      → 가볍고 빠른 성능을 요구하는 경우 적합합니다.
  3. 상속
    • Class는 상속을 지원해 코드 재사용성이 높습니다.
      → OOP 설계에서 다형성을 구현할 수 있습니다.
    • Structure는 상속을 지원하지 않습니다.
      → 단순 데이터 묶음에 적합합니다.
  4. 용도 및 설계 목적
    • 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를 선택하는 것이 중요합니다.
    → 데이터의 불변성 여부, 상속 여부, 메모리 효율성을 고려합니다.