C#에서 구조체와 클래스의 차이점

Muhammad Maisam Abbas 2024년2월16일
  1. C#의 구조
  2. C# 클래스
  3. C#에서 구조와 클래스의 차이점
C#에서 구조체와 클래스의 차이점

이 자습서에서는 C#의 구조와 클래스 간의 차이점과 유사점에 대해 설명합니다.

C#의 구조

struct키워드는 C#의 구조를 정의합니다. 클래스와 유사하게 구조에는 변수, 속성 및 함수가 포함될 수 있습니다. C#에서 구조에 대한 생성자를 정의 할 수 있습니다. 그러나 C#의 구조에 대한 기본 생성자를 정의 할 수 없습니다. C#의 구조에 대한 소멸자를 정의 할 수 없습니다. 구조는 C#으로 인터페이스를 구현할 수도 있습니다. 구조체와 클래스의 주요 차이점은 상속을 위해 구조체를 다른 구조체 나 클래스의 기반으로 사용할 수 없다는 것입니다. 다음 코드 예제는 C#에서struct키워드를 사용하여 간단한 구조를 정의하는 방법을 보여줍니다.

struct MyStructure {
  public int x;
};

위의 코드에서는 C#의struct키워드로 구조를 정의합니다. 인스턴스를 생성하여 구조를 사용할 수 있습니다. 구조의 인스턴스를 만드는 코드는 다음과 같습니다.

MyStructure S = new MyStructure();

위 코드에서 C#의new키워드를 사용하여MyStructure구조의 인스턴스를 만들었습니다.

C# 클래스

class키워드는 C#의 클래스를 정의합니다. 구조와 마찬가지로 클래스는 C#에서 변수, 속성 및 함수를 가질 수 있습니다. C#에서 클래스에 대한 기본 생성자와 소멸자를 정의 할 수도 있습니다. 클래스의 주요 기능은 상속입니다. 따라서 클래스는 상속을 위해 다른 클래스의 기반으로 사용할 수 있습니다. 클래스의 또 다른 고유 한 기능은 다형성입니다. 다음 코드 예제는 C#에서class키워드를 사용하여 간단한 클래스를 정의하는 방법을 보여줍니다.

class MyClass {
  int x;
  public MyClass(int a) {
    this.x = a;
  }
  public void setx(int a) {
    this.x = a;
  }
  public void show() {
    Console.WriteLine("The value of x = {0}", x);
  }
}

위의 코드에서 C#의class키워드를 사용하여 클래스를 정의합니다. 인스턴스를 생성하여 클래스를 사용할 수 있습니다. 클래스의 인스턴스를 만드는 코드는 다음과 같습니다.

MyClass C = new MyClass(100);

위 코드에서 C#의new키워드를 사용하여MyClass클래스의 인스턴스를 만들었습니다.

C#에서 구조와 클래스의 차이점

구조는 값 유형 변수이며 스택에 있습니다. 클래스는 참조 유형 변수이며 스택 내부의 해당 힙을 참조하여 힙에 있습니다.

구조는 널값을 가질 수 없지만 클래스는 널값을 가질 수 있습니다. 이는 값 유형 변수에는 값이 있어야하는 반면 참조 유형 변수는 메모리 주소를 가리킬 수도 있고 가리 키지 않을 수도 있음을 의미합니다. C#의 구조와 클래스 간의 차이점은 아래 코딩 예제에 나와 있습니다.

MyStructure S = new MyStructure();
MyStructure S2 = S;

S.x = 100;
S2.x = 200;

Console.WriteLine("Structure 1 = {0}", S.x);
Console.WriteLine("Structure 2 = {0}", S2.x);

출력:

Structure 1 = 100
Structure 2 = 200

먼저MyStructure구조의S인스턴스를 생성 한 다음 동일한 인스턴스 인S2의 다른 사본을 생성했습니다. 그 후 두 인스턴스 내에서 값을 초기화했습니다.

출력에서 인스턴스의 서로 다른 두 복사본에 대해 서로 다른 두 값을 얻습니다. 이는 스택 내부에MyStructure구조의 두 개의 개별 사본이 있음을 의미합니다. 값 유형 변수를 다른 변수에 복사하면 값 유형 변수의 모든 내용에 대한 별도의 사본이 생성됩니다.

다음 코드 예제에서MyClass클래스에 대해 동일한 작업을 수행합니다.

MyClass C = new MyClass(100);
MyClass newC = C;

newC.setx(100);
newC.setx(200);

C.show();
newC.show();

출력:

The value of x = 200
The value of x = 200

먼저MyClass클래스의C인스턴스를 생성 한 다음 해당 인스턴스를MyClass클래스의 다른 인스턴스newC에 복사했습니다. 그 후setx()함수를 사용하여 두 인스턴스 내에서 변수x의 값을 설정합니다.

출력에서 두 인스턴스 내에서 변수x의 동일한 값을 얻습니다. 이는CnewC인스턴스가 모두 힙 내의 동일한 메모리 위치를 가리킴을 의미합니다. 참조 유형 변수를 다른 변수에 복사 할 때 참조 유형 변수의 참조 만 복사합니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Csharp Class