C에서의 구조체: 초보자 가이드
안녕하세요, 도전하는 프로그래머 여러분! 오늘 우리는 C에서의 구조체라는 매력적인 세계로 뛰어들어 보겠습니다. 코드를 한 줄도 작성한 적이 없으신 분들도 걱정 마세요 - 저는 이 여정을 단계별로 안내해 드릴 것입니다. 수년 동안 수많은 학생들을 가르친 경험을 바탕으로 말입니다. 그麼, 이 모험을 함께 시작해 보겠습니다!
C에서의 구조체는 무엇인가요?
디지털 주소록을 만들고 있다고 상상해 보세요. 각 사람에 대해 그들의 이름, 전화번호, 이메일 주소를 저장하고 싶을 것입니다. C에서는 구조체를 사용하여 이러한 관련 정보들을 단일 이름 아래 모을 수 있습니다. 마치 여러 가지 데이터를 담을 수 있는 커스텀 데이터 타입을 만드는 것입니다.
간단한 비유를 들자면, 구조체를 배낭으로 생각해 보세요. 배낭은 책, 펜, 물병 등 다양한 물건을 담을 수 있는 것처럼, 구조체는 다양한 타입의 데이터를 담을 수 있습니다.
구조체 선언 (생성)
우선 우리는 첫 번째 구조체를 생성해 보겠습니다. 이를 위해 struct
키워드를 사용합니다.
struct Person {
char name[50];
int age;
float height;
};
이 예제에서 우리는 Person
이라는 구조체를 생성했습니다. 이 구조체는 이름(최대 50자), 나이(정수), 신장(부동소수점 수)을 담을 수 있습니다.
구조체 변수 선언
이제 우리가 정의한 구조체를 사용하여 변수를 생성해 보겠습니다.
struct Person john;
이 줄은 struct Person
타입의 변수 john
을 생성합니다. 마치 "C야, 'john'이라는 배낭을 주세요. 그 배낭에는 이름, 나이, 신장을 담을 수 있게 하세요."라고 말하는 것과 같습니다.
구조체 초기화
구조체에 데이터를 넣어 보겠습니다:
struct Person john = {"John Doe", 30, 5.9};
여기서 우리는 john
배낭에 이름("John Doe"), 나이(30), 신장(5.9)을 담습니다.
구조체 멤버 접근
구조체의 데이터에 접근하거나 수정하기 위해서는 점(.) 연산자를 사용합니다:
printf("Name: %s\n", john.name);
printf("Age: %d\n", john.age);
printf("Height: %.1f\n", john.height);
john.age = 31; // 존, 생일 축하드립니다!
이 코드는 존의 세부 정보를 출력하고 그의 나이를 갱신합니다. 마치 배낭의 특정 주머니에 손을 넣는 것과 같습니다.
구조체 복사
C에서는 같은 타입의 하나의 구조체를 다른 구조체로 복사할 수 있습니다:
struct Person jane = john;
이렇게 하면 john
과 같은 데이터를 가진 새로운 Person
인 jane
을 생성합니다. 마치 존의 배낭을 정확하게 복사하여 제인에게 주는 것과 같습니다.
함수 인수로 구조체 전달
구조체를 함수에 인수로 전달할 수도 있습니다. 다른 데이터 타입과 마찬가지로:
void printPerson(struct Person p) {
printf("Name: %s, Age: %d, Height: %.1f\n", p.name, p.age, p.height);
}
// 사용
printPerson(john);
이 함수는 Person
구조체를 받아서 그 내용을 출력합니다. 마치 배낭을 다른 사람에게 건네주어서 그 안에 무엇이 들어 있는지 말해달라고 하는 것과 같습니다.
구조체 포인터
때로는 큰 구조체를 다루할 때 포인터를 사용하는 것이 효율적입니다:
struct Person *pJohn = &john;
printf("Name: %s\n", (*pJohn).name);
// 또는, 더 일반적으로:
printf("Age: %d\n", pJohn->age);
화살표 연산자(->
)는 포인터를 해제하고 멤버에 접근하는 것을 줄인 표현입니다. 마치 배낭의 위치를 가리키는 지도를 가지고 있어 배낭 자체를 들고 다르지 않은 것과 같습니다.
비트 필드
비트 필드는 구조체 멤버에 사용할 비트 수를 지정할 수 있습니다:
struct PackedData {
unsigned int flag : 1;
unsigned int data : 31;
};
이 구조체는 32비트 메모리만 사용합니다: flag
에 1비트, data
에 31비트를 사용합니다. 마치 배낭에 매우 작은 물품을 보관할 수 있는 특별한 주머니를 가지고 있는 것과 같습니다.
메서드 표
다음은 우리가 다룰 메서드의 빠른 참조 표입니다:
메서드 | 설명 | 예제 |
---|---|---|
구조체 선언 | 새로운 구조체 정의 | struct Person { ... }; |
변수 선언 | 구조체 타입의 변수 생성 | struct Person john; |
초기화 | 구조체에�始值 설정 | struct Person john = {"John", 30, 5.9}; |
멤버 접근 | 구조체 멤버 접근 또는 수정 | john.age = 31; |
구조체 복사 | 하나의 구조체를 다른 구조체로 복사 | struct Person jane = john; |
함수 인수 | 구조체를 함수에 전달 | void printPerson(struct Person p) { ... } |
구조체 포인터 | 효율적인 처리를 위한 포인터 사용 | struct Person *pJohn = &john; |
비트 필드 | 멤버에 사용할 비트 수 지정 | struct PackedData { unsigned int flag : 1; }; |
그렇게 되면! 우리는 C의 구조체 기본을 풀어냈습니다. 기억하시기 바랍니다, 배낭을 효율적으로 정리하는 것처럼, 구조체를 마스터하려면 연습이 필요합니다. 처음에는 이해가 되지 않을 수도 있지만, 계속 코딩하고 실험을 하다 보면 곧 프로처럼 데이터를 구조화할 수 있을 것입니다!
미래의 C 마법사 여러분, 즐거운 코딩을 하세요!
Credits: Image by storyset