스마트한 개발 공부/C#

[C#] Struct 구조체

스마트한지노 2021. 8. 19. 20:11
728x90
반응형

프로그램을 추상화 하기 위해서는 Class나 Struct가 필요하다. Class로 작성한 코드의 키워드를 struct로 바꿔도 코드가 실행되는 경우가 많다. Struct와 Class의 차이는 무엇일까?

1. Struct와 Class의 차이

    • 구조체는 ValueType으로 함수 호출 방식이 call by value이다. 함수가 호출될 때, 똑같은 데이터를 갖는 인스턴스가 복사가 돼서 생성된다. 즉, 매개변수로 전달을 많이 할수록 메모리가 많이 사용된다. (메서드의 실행결과에 영향을 받지 않는다)
    • 구조체는 인스턴스를 생성할 때 new 생성자를 호출할 수도 있고, 생성자와 상관없이 생성할 수도 있다.
    • 구조체는 생성자를 정의해도 기본생성자가 무조건 추가생성 된다.
    • 구조체는 생성자를 정의할 떄 모든 멤버에 대해서 모두 정의해야 한다.      

2. Struct 예시

struct Person
{
    public string Name { get; set; }

    public int Age { get; set; }

    public override string ToString()
    {
        return $"{Name} - {Age}";
    }

    public Person(string name, int age)
    {
        this.Name = name;
        this.Age = age;
    }
}​

Struct는 생성자를 만들때 모든 속성이 들어가야 한다. name이나 age 중에 하나를 지우면 속성 할당에 대한 에러가 난다.

class Struct_Example
{

    static void NextAge(Person p)
    {
        p.Age++;
    }

    static void Main()
    {
        Person p1 = new Person();
        p1.Name = "홍길동";
        p1.Age = 20;

        Console.WriteLine(p1); //20
        NextAge(p1);
        Console.WriteLine(p1); //20
    }
}

Class로 만든 인스턴스는 위와 동일하게 인스턴스의 값을 불러와 함수를 호추랗면 값에 영향을 받는다. 하지만, struct를 값에 영향을 받지 않는다.

728x90
반응형