C언어 구조체 선언 및 멤버 다루기
C언어에서 struct를 통한 구조체 객체를 선언해보고
구조체 내 멤버 변수를 할당하고 접근하는 방법에 대해서 살펴보도록 하겠습니다.
구조체란?
먼저, 구조체란 객체들이 특정 종류의 속성을 공통적으로 보유할 때,
해당 속성들을 객체 내에 종속시켜 한 묶음 단위의 형태로 선언하는 객체를 의미합니다.
예를 들어, '책'이라는 객체는 공통적으로 저자, 제목, 가격, 페이지 수 등의 속성을 공유합니다.
따라서, 책이라는 객체를 선언할 때 위의 속성들을 묶어서 한 단위처럼 취급한다면
가장 비싼 책을 뽑거나, 특정 저자의 책 제목 등을 가져올 때 유용하게 사용할 수 있을 것입니다.
구조체 struct 선언 방법, 멤버 변수란?
이름, 가격 및 카테고리 정보를 가지는 '상품'이라는 구조체를 생각해보겠습니다.
해당 구조체의 정의 및 선언은 아래 예시 코드의 틀로 진행해주시면 됩니다.
#include <stdio.h>
int main(){
// 구조체 정의
struct Product { // 구조체 변수 이름
// 구조체 멤버 정의(문자열, 정수, 실수 등...)
char name[30];
int price;
char category[30];
};
// 구조체 변수 선언
struct Product p1;
struct Product p2;
}
멤버 변수는 구조체가 가지는 속성들을 의미합니다.
여기서는 name, price, category라는 세 가지 속성이 멤버 변수에 해당되며,
각각 char 배열, 정수 등의 고유한 자료형을 가지는 것을 확인할 수 있습니다.
구조체 멤버 변수 할당 및 접근
이제 위에서 선언한 구조체 변수 p1, p2에 대하여 멤버 변수 값을 할당하고
할당된 멤버 변수의 값에 접근해보겠습니다.
멤버 변수 값을 할당할 때 문자열 자료형이 아닌 경우는 p1.price = 1500처럼
변수명.멤버명 = 할당할 값 형태로 값을 선언해주시면 되는데,
문자열 자료형은 위의 방법으로 할당이 불가하고 string.h의 strcpy 함수를 사용하여
아래 코드처럼 할당해주셔야 합니다.
#include <string.h> // strcpy 함수 사용
// ... //
// 구조체 멤버 변수 할당
strcpy(p1.name, "choco milk"); // p1.name = "choco milk" 처럼 할당 불가
p1.price = 1500;
strcpy(p1.category, "food"); // p1.category = "food" 처럼 할당 불가
마찬가지로, p2의 멤버 값도 할당해보고 각 멤버 변수의 값에 접근하여 출력해보겠습니다.
// p2의 멤버 변수 할당
strcpy(p2.name, "t-shirts");
p2.price = 9900;
strcpy(p2.category, "clothes");
// 멤버 변수 접근 및 출력
printf("p1의 이름은 %s 이고, 가격은 %d원 이며, 카테고리는 %s 입니다.\n", p1.name, p1.price, p1.category);
printf("p2의 이름은 %s 이고, 가격은 %d원 이며, 카테고리는 %s 입니다.\n", p2.name, p2.price, p2.category);
멤버 변수의 값 접근 응용 사례로, 아래와 같이 더 비싼 상품의 이름을 출력하는 것도 가능합니다.
// 멤버 변수 값 비교 예시
if(p1.price > p2.price){
printf("더 비싼 상품 이름은 %s 입니다.\n", p1.name);
}else if(p1.price < p2.price){
printf("더 비싼 상품 이름은 %s 입니다.\n", p2.name);
}else{
printf("두 상품의 가격은 같습니다.\n");
}
// 출력 결과 : 더 비싼 상품 이름은 t-shirts 입니다.
심화 : typedef를 이용한 더 편리한 구조체 선언
C언어에서는 구조체를 선언할 때, struct를 붙이지 않고도
아래처럼 더 편리하게 선언이 가능한 방식을 지원하고 있습니다.
// 기존 구조체 선언 방식
struct Product p1;
// typedef 이용 시 선언 방식
Product p2;
이는 자주 사용되는 구조체인 경우 더 유용할 수 있으며,
구조체 정의 단계에서 typedef를 이용하여 정의를 해주시면 됩니다.
이에 대한 상세한 설명 및 예시 코드는 아래 링크의 글을 참고해주세요.
이상으로 C언어 구조체의 기초에 대해서 다룬 글을 마치도록 하겠습니다. 감사합니다.
'C & C++' 카테고리의 다른 글
[C언어] 정수 배열 및 문자열에서 중복 원소 찾기, 중복 제거 방법 (0) | 2022.06.06 |
---|---|
C언어 함수 선언 방법 경우의 수 정리(input, return 타입별) (0) | 2022.05.18 |
[C언어/C++] 나눗셈 연산의 원리, 몫과 나머지를 구하는 방법 (0) | 2022.05.15 |