C 기본 문법 – 구조체와 공용체 – 0편: 구조체 선언과 사용 완전 정복
안녕하세요, 여러분! 😊
오늘부터는 C 언어의 중요한 자료형 중 하나인 **구조체(structure)**와 **공용체(union)**에 대해 배워볼 건데요.
그 첫걸음으로, 오늘은 **구조체(struct)**의 선언과 사용 방법을 꼼꼼히 알려드릴게요.
🧠 구조체는 무엇인가요?
구조체는 서로 다른 타입의 변수들을 하나로 묶는 자료형이에요!
예를 들어, 이름(문자열), 나이(정수), 키(실수) 정보를 한 사람 정보로 묶고 싶을 때 쓰는 거죠!
마치 여러 개의 도구를 한 가방에 담듯이, 다양한 데이터를 논리적으로 하나의 단위로 다룰 수 있게 해준답니다.
그럼, 구조체의 개념부터 사용법, 예제, 주의할 점까지 친절하게 안내드릴게요 💡
1. 구조체란 무엇인가요?
구조체는 여러 개의 서로 다른 자료형을 하나로 묶은 사용자 정의 자료형이에요.
struct 구조체이름 {
멤버변수1;
멤버변수2;
...
};
마치 ‘사람’이라는 구조체 안에
이름
,나이
,주소
같은 정보들이 들어 있는 느낌이죠!
2. 구조체 선언 예제
struct Person {
char name[20];
int age;
float height;
};
위 코드는 Person
이라는 이름을 가진 구조체입니다.
이 구조체는 다음과 같은 3가지 멤버를 포함해요:
char name[20]
: 이름int age
: 나이float height
: 키
3. 구조체 변수 선언과 사용
선언
struct Person p1;
초기화
strcpy(p1.name, "홍길동");
p1.age = 25;
p1.height = 173.5;
출력 예시
printf("이름: %s
", p1.name);
printf("나이: %d세
", p1.age);
printf("키: %.1fcm
", p1.height);
4. 구조체를 배열처럼 사용하기
struct Person people[3]; // 구조체 배열 선언
초기화 예시
strcpy(people[0].name, "철수");
people[0].age = 20;
people[0].height = 180.2;
strcpy(people[1].name, "영희");
people[1].age = 22;
people[1].height = 165.7;
5. 구조체를 함수에 전달하기
함수로 구조체 전달
void printPerson(struct Person p) {
printf("이름: %s, 나이: %d, 키: %.1f
", p.name, p.age, p.height);
}
호출 방법
printPerson(p1);
💡 구조체를 함수에 전달할 때는 값에 의한 전달이 기본이기 때문에, 복사본이 전달돼요!
6. 구조체에 typedef 사용하기
매번 struct Person
을 쓰는 게 번거로우셨다면?
typedef struct {
char name[20];
int age;
float height;
} Person;
이렇게 하면, 이제는 아래처럼 간단하게 사용 가능해요:
Person p1;
🎯
typedef
는 구조체를 새로운 자료형처럼 사용할 수 있게 만들어주는 별칭 기능이에요!
7. 구조체 포인터 사용
구조체를 가리키는 포인터도 자주 사용됩니다.
Person p = { "민수", 21, 175.4 };
Person *ptr = &p;
printf("이름: %s
", ptr->name); // 화살표(->) 사용!
printf("나이: %d
", ptr->age);
🔑 구조체 포인터를 사용할 땐
->
연산자를 꼭 사용해야 합니다!
8. 구조체 중첩 사용
구조체 안에 구조체를 멤버로 넣을 수도 있어요!
typedef struct {
int year, month, day;
} Date;
typedef struct {
char name[20];
Date birthday;
} Member;
Member m = { "지우", {1997, 6, 12} };
printf("%s의 생일은 %d년 %d월 %d일입니다.
", m.name, m.birthday.year, m.birthday.month, m.birthday.day);
🎯 복잡한 데이터를 논리적으로 구성할 수 있어요!
✅ 구조체 요약 정리
요소 | 설명 | 예시 |
---|---|---|
선언 | struct 키워드 사용 | struct Person { ... }; |
사용 | 구조체 변수 선언 | struct Person p1; |
접근 | 점(.) 연산자 사용 | p1.age = 20; |
포인터 | -> 연산자 사용 | ptr->name |
typedef | 별칭 선언 | typedef struct { ... } Person; |
⚠️ 구조체 사용 시 주의할 점
주의사항 | 설명 |
---|---|
구조체 크기 주의 | 여러 데이터가 모이므로 메모리 공간 큼 |
문자열은 배열로 | char name[20] 처럼 배열 선언 필요 |
복사 시 주의 | 함수 인자로 전달되면 복사본 전달됨 (수정 X) |
포인터 연산 정확히 | -> 와 . 헷갈리지 않게 주의 |
멤버 초기화 순서 | 구조체 초기화 시 순서에 맞춰야 함 |
마무리하며 💬
구조체는 단순한 데이터를 넘어서 더 풍부하고 현실적인 데이터를 표현하는 데 아주 중요한 도구입니다!
실제 프로그램에서는 사람, 학생, 상품, 날짜, 좌표 등 다양한 개념을 구조체로 표현하게 됩니다.
🎯 구조체는 마치 현실 세계의 객체를 코드로 표현하는 도구 같아요.
이름, 나이, 주소 등을 한 사람 안에 담듯이, 관련 데이터를 하나로 묶어줍니다!
다음 시간에는 구조체의 형제 격인 **공용체(union)**도 함께 살펴볼게요!
계속해서 C 언어의 중급 기능에 도전하며 프로그래밍 실력을 업그레이드해봅시다! 💻🔥
궁금한 점이 있다면 언제든지 댓글 달아주세요!
함께하는 C 언어 친구, 챗GPT였습니다 😊