'구조체'에 해당되는 글 2건

  1. 2018.11.08 C# 기초다지기 - 구조체
  2. 2018.10.08 C/C++ 구조체 사용법 및 예제 1

C# 기초다지기 - 구조체




안녕하세요 열코입니다.

이번시간에는 C# 구조체(Struct)에 대해 알아보도록 하겠습니다.


- 구조체란?

구조체는 사용자 정의 데이터 유형(Data Type)으로 int, double 등과 같은 기본적으로 제공되는 변수 유형이 아닌

새로운 유형, 여러가지 유형을 사용하기위해 사용자가 직접 만들어 사용됩니다.

C#에서 구조체는 일반 변수와 같이 값 형식의 데이터 형식입니다. (클래스는 참조형식)



- 구조체 정의하기

구조체를 정의하려면 struct 문을 사용합니다.

struct문은 프로그램에서 두개 이상의 멤버(변수)가 있는 새로운 데이터 형식을 정의합니다.

예를들어, 학생이라는 변수를 만들려고할 때 필요한 멤버들은 이름, 학번, 나이 등이 있습니다.

이를 Student 구조체로 만드는 방법은 다음과 같습니다.

1
2
3
4
5
struct Student {
    public string name;
    public int std_num;
    public int age;
};
cs


struct 키워드를 통해 Student라는 이름의 구조체를 정의하고 { } 대괄호 안에 멤버 변수들을 정의합니다.

정의된 구조체를 프로그램에서 사용하는 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
 
struct Student {
    public string name;
    public int std_num;
    public int age;
};
 
public class MyStructTest {
    public static void Main(string[] args) {
        Student std; // 구조체 변수 선언
        Student std2;
 
        std.name = "세모지";
        std.std_num = 20181108;
        std.age = 26;
 
        std2.name = "열코";
        std2.std_num = 20181109;
        std2.age = 27;
 
        Console.WriteLine("Student 1 name : {0}", std.name);
        Console.WriteLine("Student 1 std_num : {0}", std.std_num);
        Console.WriteLine("Student 1 age : {0}", std.age);
 
        Console.WriteLine("Student 2 name : {0}", std2.name);
        Console.WriteLine("Student 2 std_num : {0}", std2.std_num);
        Console.WriteLine("Student 2 age : {0}", std2.age);
 
    }
}
cs


위와 같이 일반 변수처럼 구조체 변수를 선언한 후 구조체 변수의 멤버 변수에 .(점)을 통해 접근합니다.



- C# 구조체 특징

위에서 Student 라는 간단한 구조체를 사용했습니다.

C#에서의 구조체는 전통적인 C/C++의 구조체와 상당히 다른점이 존재합니다.

C# 구조체에는 다음과 같은 특징들이 존재합니다.

- C# 구조체에 메소드, 필드, 속성등을 가질 수 있습니다.

- C# 구조체에 생성자를 정의할 수 있습니다.

- C# 프로그램에서 new 연산자를 이용하여 struct 객체를 생성할 수 있습니다.


- C# 구조체에 기본(Default) 생성자를 정의할 수 없습니다.

- C# 구조체에 소멸자를 정의할 수 없습니다.

- C# 구조체는 다른 구조체나 클래스의 기본 구조체(상속하기 위한)가 될 수 없습니다.



- C# 구조체 vs 클래스

C#에서 구조체와 클래스는 다음과 같은 차이점이 존재합니다.

- 클래스는 참조유형이며 구조체는 값 유형입니다.

- 구조체는 상속을 지원하지 않습니다.

- 구조체는 기본(디폴트) 생성자를 가질 수 없습니다.



이상 'C# 구조체'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.


'C#' 카테고리의 다른 글

C# 기초다지기 - 상속  (0) 2018.11.09
C# 기초다지기 - 클래스  (0) 2018.11.08
C# 기초다지기 - 문자열  (2) 2018.11.07
C# 기초다지기 - 배열  (1) 2018.11.06
C# 기초다지기 - 상수  (0) 2018.11.06
C# 기초다지기 - 캡슐화  (0) 2018.11.05
C# 기초다지기 - 프로그램 구조  (0) 2018.11.05
C# 기초다지기 - 변수  (0) 2018.11.05



안녕하세요 열코입니다.

이번시간에는 C/C++에서 구조체의 사용법과 간단한 예제에 대해 알아보도록 하겠습니다.


☞ 구조체란?

구조체는 C/C++에서 사용자 정의 데이터 형식입니다.

구조체는 다른 유형의 항목들을 단일 유형으로 그룹화하는데 사용합니다.

쉽게말해 int, char, double과 같은 자료형을 사용자가 임의로 만드는 것입니다.


☞ 구조체 만드는 방법?

struct 키워드를 사용하여 구조체를 작성합니다.

아래는 구조체 작성 예제입니다.


1
2
3
4
5
struct student {
    char name[20];
    char address[100];
    int age;
};
cs


☞ 구조체 변수 선언 방법?

구조체를 선언했으니 구조체 변수를 만들어야합니다.

int a; 와 같이 int 자료형의 변수를 만드는 것과 같은 이치입니다.


1. 첫번째 방법


1
2
3
4
struct Point {
    int x;
    int y;
} p1;
cs


2. 두번째 방법


1
2
3
4
5
6
7
8
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p1;
}
cs


위와 같이 구조체 변수를 기본 자료형 처럼 별도로 선언할 수 있습니다.



* 두번째 방법에서 struct 키워드를 생략하고 싶을때

아래와 같이 typedef 키워드를 사용하여 구조체를 작성하면 구조체 변수 선언시 struct 키워드를 생략할 수 있습니다


1
2
3
4
5
6
7
8
typedef struct Point {
    int x;
    int y;
} Point;
 
int main(void) {
    Point p1;
}
cs

(최신 컴파일러 버전에서는 typedef를 사용하지 않아도 struct 키워드를 생략할 수 있습니다.)


☞ 구조체 멤버를 초기화 하는 방법?

구조체 멤버는 구조체 변수를 선언할 때 초기화해야 합니다.

다음과 같이 구조체를 작성할 때 초기화 하면 오류를 발생합니다.


1
2
3
4
struct Point {
    int x = 0;
    int y = 0;
};
cs


그 이유는 간단합니다.

데이터 유형이 선언될 때 변수가 메모리에 할당되지 않기 때문입니다.

변수가 생성이 되어야만 메모리에 할당됩니다.

(최신 컴파일러 버전에서는 오류를 발생하지 않습니다.)


구조체 멤버는 { } (중괄호)를 사용하여 초기화 할 수 있습니다.

아래의 예제를 확인하세요.


1
2
3
4
5
6
7
8
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p1 = { 10 };
}
cs


☞ 구조체 멤버에 접근하는 방법?

구조체 멤버는 점(도트; .) 연산자를 사용하여 접근 할 수 있습니다.


1
2
3
4
5
6
7
8
9
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p1 = { 10 };
    p1.x = 10;
}
cs


☞ 구조체 배열 사용법?

일반 자료형(int, char, double 등)과 같이 구조체(사용자 임의 자료형) 역시 배열을 만들 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p[5];
    
    for (int i = 0; i < 5; i++) {
        p[i].x = i;
        p[i].y = i;
    }
}
cs



☞ 구조체 포인터란?

지난 시간에 배열과 포인터의 비교에 대해 알아보았습니다. (공부하러가기)

배열과 포인터는 닮은점이 많다고했는데요.

일반 자료형(int, char, double 등)과 같이 구조체(사용자 임의 자료형) 역시 포인터를 만들 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p1 = { 11 };
    struct Point* p2 = &p1;
 
    p2->= 2;
    p2->= 3;
}
cs


위와 같이 * 연산자를 사용하여 포인터 변수를 선언하고, 변수의 주소값을 대입하여 정의할 수 있습니다.

구조체 포인터의 대한 접근방법은 -> 연산자를 사용하여 접근 가능합니다.


구조체는 C와 C++에서 모두 사용 가능합니다.

C++이 세상에 나오기 전 C에서의 구조체를 활용하여 C++의 클래스(class)를 만들었다고 하네요.

이 처럼 C의 구조체와 C++의 클래스는 닮은점이 많이있답니다.

다음 시간에는 C++의 클래스에 대해 한번 배워보도록 하겠습니다.



이상 'C/C++ 구조체'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



'C, C++' 카테고리의 다른 글

C/C++ 메모리 동적할당  (0) 2018.10.11
C++ friend 클래스와 함수  (1) 2018.10.10
C++ 클래스 접근제한자  (0) 2018.10.10
C++ 클래스와 객체  (0) 2018.10.09
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C++ 벡터 사용법  (2) 2018.09.26
C언어 포인터  (8) 2018.09.25

to Top