C์ธ์ด์ ๊ตฌ์กฐ์ฒด(struct)๋ ์๋ก ๋ค๋ฅธ ์๋ฃํ์ ํ๋๋ก ๋ฌถ์ด ์๋ก์ด ํํ์ ๋ณตํฉ ๋ฐ์ดํฐ ํ์
์ ์ ์ํ ์ ์๊ฒ ํด์ค๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค. ์ด๋ฒ ํฌ์คํ
์์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ํตํด ๋ ๊น๋ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ช ๊ฐ์ง ํ๊ณผ ์์ ๋ฅผ ์ ๊ณตํ๋ค.์ ํต์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ ๋ณ์๋ง์ผ๋ก๋ ์๋ก ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ ๋ค. ์๋ฅผ ๋ค์ด, ํ์์ ์ ๋ณด(์ด๋ฆ, ๋์ด, ์ฑ์ ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๊ฐ ํญ๋ชฉ์ ๋ณ๋์ ๋ณ์๋ก ๊ด๋ฆฌํด์ผ ํ๊ณ , ์ด๋ฌํ ๋ณ์๋ค ์ฌ์ด์ ๋
ผ๋ฆฌ์ ์ฐ๊ด์ฑ์ ์ฝ๋์์์ ๋ช
ํํ ํํํ๊ธฐ ์ด๋ ค์ ๋ค.
๊ตฌ์กฐ์ฒด๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์
๋์๋ค. ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํ๋์ ๋
ผ๋ฆฌ์ ๋จ์๋ก ๊ทธ๋ฃนํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ๋ช
ํํ ํ ์ ์๊ณ , ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ด ํฅ์๋๋ค.
โญ1. ๊ตฌ์กฐ์ฒด์ ์ฅ์
1.1. ์ง๊ณ ๋ฐ์ดํฐ์ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น: ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐ์์ ์ผ๋ก ํ ๋นํ ์ ์๋ค. ์ด๋ ๋ฐ์ดํฐ ์ ๊ทผ ์๊ฐ์ ๋จ์ถ์ํฌ ์ ์์ผ๋ฉฐ, ์บ์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
1.2. ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋ ๊ฐ์: ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋, ๊ฐ๋ณ์ ์ธ ๋ณ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๋์ผํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ณด๋ค, ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ๋ ๋ค์ํ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋จ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ค.
1.3. ํฌ์ธํฐ๋ฅผ ํตํ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ๊ทผ: ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ฃผ์๋ฅผ ํฌ์ธํฐ์ ์ ์ฅํ๊ณ , ์ด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ํนํ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๋ ์ ์ฉํ๋ค. ๋ฐ์ดํฐ์ ๋ณต์ฌ๋ณธ์ ์์ฑํ๋ ๋์ , ๋ฐ์ดํฐ์ ์ฃผ์๋ง ์ ๋ฌํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
โญ2. ๊ตฌ์กฐ์ฒด์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
๋จผ์ , ๊ตฌ์กฐ์ฒด์ ์ ์ธ๊ณผ ์ด๊ธฐํ์ ๋ํด ๊ฐ๋จํ ์ดํด๋ณธ๋ค.
#include <stdio.h>
// 'person' ๊ตฌ์กฐ์ฒด ์ ์
typedef struct {
char name[50];
int age;
float salary;
} Person;
int main() {
// ๊ตฌ์กฐ์ฒด ๋ณ์ ์ด๊ธฐํ
Person person1 = {"John Doe", 30, 50000.0};
printf("Name: %s\nAge: %d\nSalary: %.2f\n", person1.name, person1.age, person1.salary);
return 0;
}
โญ3. ๊ตฌ์กฐ์ฒด ํ์ฉ ํ
- ํ์ ์ ์ ์ฌ์ฉํ๊ธฐ: typedef๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด์ ๋ณ๋ช ์ ์ง์ ํจ์ผ๋ก์จ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค. ์ด๋ ์์ ์์ ๋ณด๋ฏ์ด, ๋งค๋ฒ struct ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๊ฒ ํด์ค๋ค.
- ํจ์์ ๊ตฌ์กฐ์ฒด ๊ฒฐํฉํ๊ธฐ: ๊ตฌ์กฐ์ฒด๋ฅผ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ฑฐ๋, ํจ์์์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ชจ๋ํํ๊ณ , ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค.
#include <stdio.h>
typedef struct {
char title[50];
char author[50];
int pages;
} Book;
// ํจ์๋ฅผ ํตํด ๊ตฌ์กฐ์ฒด ๋ฐํ
Book createBook(char *title, char *author, int pages) {
Book newBook;
strcpy(newBook.title, title);
strcpy(newBook.author, author);
newBook.pages = pages;
return newBook;
}
void printBook(Book book) {
printf("Book: %s by %s, %d pages\n", book.title, book.author, book.pages);
}
int main() {
Book book1 = createBook("C Programming", "Dennis Ritchie", 279);
printBook(book1);
return 0;
}
3.1. ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ: ์ ์ฌํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์ฑ
์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์๋ค.
3.2. ํฌ์ธํฐ์ ๊ตฌ์กฐ์ฒด: ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ฃผ์๋ฅผ ๋ค๋ฃจ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด, ํจ์๋ฅผ ํตํด ์๋ณธ ๊ตฌ์กฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ณ , ํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
โญ4. ์ค๊ธ#1 : ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ
๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ C์ธ์ด ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค. ์๋ ์์๋ ๊ตฌ์กฐ์ฒด์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
์ด ์์ ์์๋ Person ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๊ณ , ๊ทธ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค์, ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ ์ธ์คํด์ค์ ํ๋์ ์ ๊ทผํ๋ค.
#include <stdio.h>
#include <string.h>
// ๊ตฌ์กฐ์ฒด ์ ์
typedef struct {
char name[100];
int age;
} Person;
int main() {
// ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค ์์ฑ
Person person1;
// ๊ตฌ์กฐ์ฒด ํ๋์ ์ง์ ์ ๊ทผํ์ฌ ๊ฐ ํ ๋น
strcpy(person1.name, "John Doe");
person1.age = 30;
// ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์ ์ธ ๋ฐ ์ด๊ธฐํ
Person *ptr = &person1;
// ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ ๊ทผ ๋ฐ ๊ฐ ์ถ๋ ฅ
printf("Name: %s\n", ptr->name);
printf("Age: %d\n", ptr->age);
return 0;
}
์ด ์ฝ๋๋ ๋ค์์ ์ํํ๋ค:
4.1. Person ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ค.
4.2. person1์ด๋ผ๋ Person ํ์
์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํ๋ค.
4.3. Person ํ์
์ ํฌ์ธํฐ ptr์ ์ ์ธํ๊ณ , person1์ ์ฃผ์๋ก ์ด๊ธฐํํ๋ค.
ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ person1์ name๊ณผ age ํ๋์ ์ ๊ทผํ๊ณ , ์ด๋ค์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด, ํจ์์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํจ์ ๋ด์์ ๊ตฌ์กฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
โญ5. ์ค๊ธ#2 : ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ
์ฌ๊ธฐ์๋ ๊ตฌ์กฐ์ฒด์ ํจ์๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋จํ ํ์ ์ฑ์ ๊ด๋ฆฌ ์์คํ ์ ๊ตฌํํ๊ณ , ๊ฐ ํ์์ ์ ๋ณด์ ์ฑ์ ์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ์ด ์์ ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ ๋ณด๋ฅผ ์ ์ํ๊ณ , ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ํตํด ์ฌ๋ฌ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋ํ, ํฌ์ธํฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด ๋ด์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ์ฒ๋ฆฌํ๋ค.
#include <stdio.h>
#define STUDENT_COUNT 3
// ํ์ ์ ๋ณด๋ฅผ ์ํ ๊ตฌ์กฐ์ฒด ์ ์
typedef struct {
char name[50];
int id;
float grade;
} Student;
// ํ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ํจ์
void printStudent(Student *s) {
printf("ํ์ ์ด๋ฆ: %s\n", s->name);
printf("ํ์ ID: %d\n", s->id);
printf("์ฑ์ : %.2f\n\n", s->grade);
}
int main() {
// ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ์ ์ธ
Student students[STUDENT_COUNT] = {
{"ํ๊ธธ๋", 1, 92.5},
{"๊น์ฒ ์", 2, 85.3},
{"์ด์ํฌ", 3, 78.4}
};
// ๋ชจ๋ ํ์ ์ ๋ณด ์ถ๋ ฅ
printf("ํ์ ๋ชฉ๋ก:\n");
for(int i = 0; i < STUDENT_COUNT; i++) {
printStudent(&students[i]);
}
return 0;
}
5.1. Student ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ์ฌ ํ์์ ์ด๋ฆ, ID, ์ฑ์ ์ ์ ์ฅํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค.
5.2. STUDENT_COUNT๋ฅผ ์ ์ํ์ฌ ํ์ ์๋ฅผ ์์๋ก ์ค์ ํฉ๋๋ค. ์ด ์์ ์์๋ 3๋ช
์ ํ์์ ๊ฐ์ ํ๋ค.
5.3. students ๋ฐฐ์ด์ ์ ์ธํ๊ณ ์ด๊ธฐํํ์ฌ, 3๋ช
์ ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
5.4. printStudent ํจ์๋ Student ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์, ํด๋น ํ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ด ํจ์๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ค.
5.5. main ํจ์์์๋ ๋ชจ๋ ํ์ ์ ๋ณด๋ฅผ ์ํํ๋ฉฐ ์ถ๋ ฅํฉ๋๋ค. ์ด ๋, printStudent ํจ์์ ๊ฐ ํ์ ์ ๋ณด์ ์ฃผ์๋ฅผ ์ ๋ฌํ์ฌ, ํด๋น ํ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 6. UNION ๊ณต์ฉ์ฒด์ STRUCT ๊ตฌ์กฐ์ฒด๋ก ํจํท ๋ง๋ค๊ธฐ (2) | 2024.09.04 |
---|---|
[C/C++ Tip] 5. ๊ตฌ์กฐ์ฒด ํจ๋ฉ์ ํ์์ฑ (0) | 2024.09.04 |
[C/C++ Tip] 3. ์ฝ๋ฉ ๊ท์น. ๋ณ์๋ช ์ ํ๊ธฐ (0) | 2024.09.01 |
[C/C++ Tip] 2. #define์ ๋ชฉ์ (0) | 2024.09.01 |
[C/C++ Tip] 1. ๊ฐ๋ฐํ๊ธฐ ์ , typedef ๋ณ๋ช ๋ถ์ฌ. (0) | 2024.09.01 |