C++

[강의] 10월 17일 수업정리

k-codestudy 2024. 10. 18. 03:42

오늘은 구조체에 대한 수업을 들었다.

 

구조체 (struct)

정의

구조체(struct)는 사용자가 C++의 기본타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이다. 구조체는 기본타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다. 배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이다.

 

1.1 구조체를 사용하는 방법

  • 자료형 정의 : 기본 자료형을 조합하여 새로운 자료형을 만들 수 있다. (여러 타입을 묶어 새루운 자료형을 만드는 개념)
  • 명명 규칙 : 변수와 구조체를 구별하기 위해 구조체 이름은 주로 대문자로 작성한다.
  • 세미콜론 필수 : 구조체 선언 후, 중괄호( {} ) 끝에는 반드시 세미콜론( ; ) 을 붙여햐 합니다. 그렇지 않으면 다름 라인에서 오류가 발생할 수 있다.
  • 구조체의 역활 : 구조체는 데이터의 묶음이다. 함수와 클래스도 포함할 수 있지만, 구조체에 클래스나 맴버함수를 포함시키지는 것은 권장하지 않는다. 이유는 구조체가 아닌 클래스처럼 인식될 수 있기 때문이다. 

 

1.2 기본적인 구조체 선언

#include <iostream>

struct S_DATA
{
	int n1;
	int n2;
	float f1;
	float f2;
};

int main()
{
	S_DATA sData{};

	sData.n1 = 10;
	printf("%d\n", sData.n1);
}
  1. struct S_DATA : 구조체의 선언 (포장지)
  2. int n1, int n2 ... : 구조체의 맴버 변수 (내용물)
  3. . : 맴버 접근자 (중요)

위의 코드는 구조체의 기본적인 형태이다.

struct S_DATA 내부에 int n1 ~ float f2까지 변수를 선언한 후, int main에서 S_DATA sData{}로 구조체 변수를 선언하고, 맴버 접근자 . 을 이용하여 sData.n1에 값을 할당할 수 있다. 이를 출력하면 10이 출력하게 된다.

 

1.3 C 언어에서의 구조체

C 언어에서 구조체는 C++과 약간 다릅니다.

#include <stdio.h>

typedef struct _s_data
{
	int n1;
	int n2;
	float f1;
	float f2;
}S_DATA;

int main()
{
	S_DATA sData{};

	sData.n1 = 10;
	printf("%d\n", sData.n1);
}
  • C 언어에서는 typedef를 사용하여 _s_data를 S_DATA로 정의한다.
  • typedef는 형식 정의의 약자로, _s_data라는 구조체를 S_DATA라는 이름으로 사용할 수 있게 한다

 

1.4 구조체 사용 시 주의사항

  • 직접 초기화 금지: 구조체를 사용할 때, 중괄호({}) 내부에 값을 직접 넣어서 초기화하지 않는 것이 좋다.
    • 잘못된 값이 들어가더라도 컴파일 오류가 발생하지 않으며, 데이터를 그대로 밀어 넣기 때문에 예기치 않은 결과가 발생할 수 있다.
    • 예를 들어, 구조체에서 변수가 추가될 경우, 기존의 중괄호 내부 값들이 제대로 대응되지 않아 잘못된 값이 들어갈 수 있다.
  • 구조체 모양이 변경되지 않을 경우에는 직접 값을 넣어도 무방하지만, 구조체가 변경될 가능성이 있다면 사용하지 않아야 한다.

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

[강의] 10월 22일 수업정리  (1) 2024.10.23
[강의] 10월 18일 수업정리  (1) 2024.10.20
[강의] 10월 16일 수업정리  (1) 2024.10.17
[강의] 10월 15일 수업정리  (1) 2024.10.16
[강의] 10월 11일 수업정리  (1) 2024.10.14