개발자 성장일지

Part 구조체 본문

인프런/C# 프로그래밍 기초

Part 구조체

hdigimon 2023. 12. 5. 21:57
  • 참조 형식, 값 형식에 대한 이해
    • Heap Memory, Stack Memory
  • 구조체 정의
    • 클레스 정의와 유사, calss 예약어를 struct예약어로 대체
  • 구조체와 클래스와 다른점
    • 인스턴스 생성을 new로 해도 되고, 안 해도 됨
    • 참조형식이 아닌 값 형식
    • 기본 생성자는 명시적으로 정의 불가
    • 매개변수를 갖는 생성자를 정의해도 기본 생성자가 C# 컴파일러에 의해 자동 포함됨
    • 매개변수를 받는 생성자의 경우 반드시 해당 코드 내에서 구조체의 모든 필드에 값을 할당 해야함
    • 구조체는 Heap(힙)에 생성

struct와 class 차이

 

struct

  1. 값 형식(Value Type): struct는 값 형식으로서 스택에 할당됩니다. 값 형식은 변수에 실제 데이터를 저장하며, 메모리 공간을 더 효율적으로 사용할 수 있습니다.
  2. 복사 전달: struct는 값으로 전달되기 때문에 메서드나 함수에 전달될 때 값이 복사되어 전달됩니다.
  3. 기본 생성자: struct는 생성자를 정의하지 않으면 기본 생성자가 자동으로 제공됩니다.
  4. 상속 불가능: struct는 다른 형식에서 상속할 수 없습니다.

class

  1. 참조 형식(Reference Type): class는 참조 형식으로서 힙(heap)에 할당됩니다. 참조 형식은 데이터에 대한 참조를 저장하고 데이터 자체는 힙에 저장됩니다.
  2. 참조 전달: class는 참조로 전달되기 때문에 메서드나 함수에 전달될 때 참조만 복사되어 전달됩니다.
  3. 기본 생성자: class도 생성자를 정의하지 않으면 기본 생성자가 자동으로 제공됩니다.
  4. 상속 가능: 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