산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 구조체(Struct) 이해하기: 값 타입 정의와 사용법

C#에서 구조체(Structure)는 값 타입(Value Type) 데이터 타입입니다. 서로 다른 데이터 타입의 관련 데이터를 하나의 변수에 담을 수 있게 해줍니다. struct 키워드로 생성합니다.

구조체는 레코드(Record)를 표현하는 데 사용됩니다. 예를 들어 도서관의 책 정보를 관리하려면 제목, 저자, 주제, 책 ID 등 다양한 타입의 속성을 하나의 단위로 묶어야 합니다.

구조체 정의

struct 문으로 정의하며, 프로그램에서 사용할 둘 이상의 멤버를 가진 새로운 데이터 타입을 정의합니다.

struct Books
{
    public string title;
    public string author;
    public string subject;
    public int book_id;
};

구조체 사용 예제

using System;

struct Books
{
    public string title;
    public string author;
    public string subject;
    public int book_id;
}

public class testStructure
{
    public static void Main(string[] args)
    {
        Books Book1;  // Book1 선언 (값 타입이므로 new 없이도 가능)
        Books Book2;
        
        // Book1 데이터 설정
        Book1.title = "C Programming";
        Book1.author = "Nuha Ali";
        Book1.subject = "C Programming Tutorial";
        Book1.book_id = 6495407;
        
        // Book2 데이터 설정
        Book2.title = "Telecom Billing";
        Book2.author = "Zara Ali";
        Book2.subject = "Telecom Billing Tutorial";
        Book2.book_id = 6495700;
        
        // 출력
        Console.WriteLine("Book 1 title : {0}", Book1.title);
        Console.WriteLine("Book 1 author : {0}", Book1.author);
        Console.WriteLine("Book 1 subject : {0}", Book1.subject);
        Console.WriteLine("Book 1 book_id : {0}", Book1.book_id);
        
        Console.WriteLine("Book 2 title : {0}", Book2.title);
        Console.WriteLine("Book 2 author : {0}", Book2.author);
        Console.WriteLine("Book 2 subject : {0}", Book2.subject);
        Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);
        
        Console.ReadKey();
    }
}

C# 구조체의 특징

C# 구조체는 전통적인 C/C++ 구조체와 상당히 다릅니다. 주요 특징:

클래스 vs 구조체

비교 항목클래스 (Class)구조체 (Struct)
타입 분류참조 타입 (Reference Type)값 타입 (Value Type)
상속 지원O (단일 상속)X (구조체/클래스 상속 불가)
기본 생성자사용자 정의 가능자동 제공, 재정의 불가
메모리 할당힙 (Heap)스택 (Stack) - 주로
Null 허용O기본적으로 X (Nullable<T> 사용 시 O)
소멸자OX

메서드를 포함한 구조체 예제 (캡슐화 적용)

using System;

struct Books
{
    private string title;
    private string author;
    private string subject;
    private int book_id;
    
    // 생성자 (매개변수 있는 생성자만 가능)
    public Books(string t, string a, string s, int id)
    {
        title = t; author = a; subject = s; book_id = id;
    }
    
    public void GetValues(string t, string a, string s, int id)
    {
        title = t; author = a; subject = s; book_id = id;
    }
    
    public void Display()
    {
        Console.WriteLine("Title : {0}", title);
        Console.WriteLine("Author : {0}", author);
        Console.WriteLine("Subject : {0}", subject);
        Console.WriteLine("Book_id : {0}", book_id);
    }
}

public class testStructure
{
    public static void Main(string[] args)
    {
        // new 연산자 사용 (생성자 호출)
        Books Book1 = new Books("C Programming", "Nuha Ali", "C Programming Tutorial", 6495407);
        Books Book2 = new Books("Telecom Billing", "Zara Ali", "Telecom Billing Tutorial", 6495700);
        
        Book1.Display();
        Book2.Display();
        Console.ReadKey();
    }
}
언제 구조체를 쓸까? 작은 데이터 구조(16바이트 이하 권장), 불변(immutable) 객체, 값 의미론이 중요한 경우(예: 좌표 Point, 복소수, 날짜 범위 등)에 구조체를 사용하세요. 큰 데이터나 참조 의미론이 필요하면 클래스가 적절합니다.

C 언어

  1. C++ 구조체 vs 클래스: 임베디드 개발자를 위한 실용 가이드
  2. Nucleus RTOS의 세마포어: 유틸리티 서비스 및 데이터 구조
  3. 서평: '디지털라이즈 오어 다이(Digitise or Die)' – IoT 주도 트랜스포메이션 청사진
  4. 파괴적 기술 시대, 인간성 지키기
  5. 데이터 저장 혁명: 투명 망토 입은 차세대 자기 나노구조
  6. 2021년 코딩 실력 향상을 위한 최고의 프로그래밍 책 17권
  7. 자바 자료구조: 핵심 클래스와 컬렉션 프레임워크 탐구
  8. C 구조체 마스터: 정의, 멤버 접근, 중첩, 정렬, 패딩, 비트필드
  9. C typedef 완전 가이드: 타입 별칭, 구조체 간소화, 함수 포인터, #define과 차이
  10. C++ 데이터 구조: 배열, 구조체, 포인터로 효율적인 프로그램 만들기