개발자 성장일지
Part 구조체 본문
- 참조 형식, 값 형식에 대한 이해
- Heap Memory, Stack Memory
- 구조체 정의
- 클레스 정의와 유사, calss 예약어를 struct예약어로 대체
- 구조체와 클래스와 다른점
- 인스턴스 생성을 new로 해도 되고, 안 해도 됨
- 참조형식이 아닌 값 형식
- 기본 생성자는 명시적으로 정의 불가
- 매개변수를 갖는 생성자를 정의해도 기본 생성자가 C# 컴파일러에 의해 자동 포함됨
- 매개변수를 받는 생성자의 경우 반드시 해당 코드 내에서 구조체의 모든 필드에 값을 할당 해야함
- 구조체는 Heap(힙)에 생성
struct와 class 차이
struct
- 값 형식(Value Type): struct는 값 형식으로서 스택에 할당됩니다. 값 형식은 변수에 실제 데이터를 저장하며, 메모리 공간을 더 효율적으로 사용할 수 있습니다.
- 복사 전달: struct는 값으로 전달되기 때문에 메서드나 함수에 전달될 때 값이 복사되어 전달됩니다.
- 기본 생성자: struct는 생성자를 정의하지 않으면 기본 생성자가 자동으로 제공됩니다.
- 상속 불가능: struct는 다른 형식에서 상속할 수 없습니다.
class
- 참조 형식(Reference Type): class는 참조 형식으로서 힙(heap)에 할당됩니다. 참조 형식은 데이터에 대한 참조를 저장하고 데이터 자체는 힙에 저장됩니다.
- 참조 전달: class는 참조로 전달되기 때문에 메서드나 함수에 전달될 때 참조만 복사되어 전달됩니다.
- 기본 생성자: class도 생성자를 정의하지 않으면 기본 생성자가 자동으로 제공됩니다.
- 상속 가능: class는 다른 클래스에서 상속할 수 있습니다.
코드
더보기
namespace Exam12_1
{
internal class Program
{
static void Main(string[] args)
{
//int a =1;
//int b = 2;
//Console.WriteLine($"1) a = {a} b = {b}");
//int c = ValueTypeTest(a, b);
//Console.WriteLine($"2) a = {a} b = {b}");
Student st = new Student();
st.Name = "Lee";
Console.WriteLine(st.Name);
ReferenceTypeTest(st);
Console.WriteLine(st.Name);
}
static int ValueTypeTest(int a, int b)
{
Console.WriteLine($"3) a = {a} b = {b}");
a++;
b++;
Console.WriteLine($"4) a = {a} b = {b}");
return a + b;
}
static void ReferenceTypeTest(Student a)
{
a.Name = "kim";
}
}
// 참조형식으로 학생 클래스입니다.
class Student
{
public int Age { get; set; }
public string Name { get; set; }
}
}
참조형식, 값형식
namespace Exam12_1
{
internal class Program
{
int i;
static void Main(string[] args)
{
Student st = new Student();
Student st2 = st;
st.Name = "Lee";
st2.Name = "Kim";
Console.WriteLine(st.Name);
Console.WriteLine(st2.Name);
}
}
// 참조형식으로 학생 클래스입니다.
class Student
{
public int Age { get; set; }
public string Name { get; set; }
}
// 값형식 학생 클래스입니다.
struct Student
{
public int Age { get; set; }
public string Name { get; set; }
}
}
'인프런 > C# 프로그래밍 기초' 카테고리의 다른 글
Part Delegate (0) | 2023.12.07 |
---|---|
Part 제네릭, GENERICS (0) | 2023.12.06 |
Part 인터페이스 - 2 (0) | 2023.12.04 |
Part Abstract 클래스 && 인터페이스 - 1 (0) | 2023.12.02 |
Part 학생 관리 클래스 모델링 실습 - 2 (0) | 2023.11.30 |