내배캠 2주차 C# 문법(3)

오도독·2024년 4월 24일

내배캠

목록 보기
10/26
post-thumbnail

구조체 vs 클래스

○ 구조체

구조체는 데이터와 관련 기능을 캡슐화할 수 있는 값 형식이에요.
구조체는 Struct 키워드를 사용해서 선언하고 멤버로 변수와 메서드로 구성할 수 있어요.

struct Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

구조체를 사용 할때는 변수를 선언하여 사용하고 멤버에 접근 할 때는 . 연산자를 사용해요.

Person person1;
person1.Name = "John";
person1.Age = 25;
person1.PrintInfo();

○ 클래스

클래스는 객체를 생성하기 위한 템플릿 또는 설계도 역할을 해요.
클래스는 속성과 동작을 가지는데 속성은 필드로, 동작은 메서드로 표현돼요.
객체를 생성하기 위해서는 클래스를 사용해 인스턴스를 만들어야 해요.
new 키워드를 사용하면 됩니다.

class Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine("Name: " + Name);
        Console.WriteLine("Age: " + Age);
    }
}

Person p = new Person();
p.Name = "John";
p.Age = 30;
p.PrintInfo(); // 출력: Name: John, Age: 30

구조체와 클래스 모두 사용자 정의 형식을 만드는데 사용될 수 있는데 , 구조체는 값 형식으로 스택에 할당되고 복사 될 때 값이 복사되고 클래스는 참조형식으로 힙에 할당되고 참조로 전달되므로 성능 측면에서 다소 차이가 있어요.
구조체는 상속을 받을 수 없지만 클래스는 단일 상속이 가능합니다.
따라서 구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합하며, 클래스는 더 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해서 사용돼요.



리스트에 구조체 값 넣기

개인 프로젝트를 진행하면서 아이템의 정보를 구조체로 만들고 리스트로 여러 아이템을 관리하려고 했는데 일반적인 리스트 데이터 추가 방식으로는 들어가지 않더라고요.

struct IItem  // 아이템 구조체
{
    public string itemname;  // 아이템 이름
    public int effect;      // 아이템 효과
    public string description;  //아이템 설명
    public int price;       //아이템 가격
}

IItem item;
List<IITem> list = new List<IITem>();

list.Add(item("수련자 갑옷", 5, "수련에 도움을 주는 갑옷입니다.", 1000));

이런 식으로 넣으려다 실패했습니다.

한참을 알아보니

list.Add(new IItem("수련자 갑옷", 5, "수련에 도움을 주는 갑옷입니다.", 1000));

이런 식으로 new 키워드를 이용해서 넣어주는 방법을 발견했습니다.

이것때문에 구조체 대신 클래스로 정의해야 하나 고민했었는데 해결방법을 찾을 수 있었어서 다행이에요.

0개의 댓글