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
의 동일한 값을 얻습니다. 이는C
및newC
인스턴스가 모두 힙 내의 동일한 메모리 위치를 가리킴을 의미합니다. 참조 유형 변수를 다른 변수에 복사 할 때 참조 유형 변수의 참조 만 복사합니다.
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