여러분 안녕하세요. 세이버입니다.
이번 강에서는 구조체에 대해서 다뤄보겠습니다.
1. 구조체란 무엇인가
구조체(Struct)란 변수들을 묶어서 그룹화한 자료의 형태입니다.
배열이 같은 타입의 변수들의 그룹이기 때문에 변수, 자료형 등이 모두 같았지만, 구조체는 다른 타입의 변수들도 그룹화를 할 수 있어서 변수명과 자료형이 모두 같지 않습니다.
구조체를 사용하려면 구조체의 형태를 main 함수 밖에서 선언을 해야 합니다.
구조체 선언법
struct [구조체 이름]
{
구조체의 멤버 변수 목록
};
구조체는 함수가 아니기에 중괄호 { } 끝에 세미콜론을 넣어줘야 합니다.
saver 구조체에 멤버 변수가 name, age, height, job이 있는 형태입니다.
2. 구조체 활용하기
구조체 선언을 main 함수 밖에 했기에 선언만 했다고 바로 사용할 수 없습니다.
구조체에 접근을 할 때 필요한 구조체 변수를 따로 선언해야 합니다.
구조체 변수를 선언하는 방법은 선언한 구조체의 이름을 사용해서 선언합니다.
struct saver s; 라고 하면 saver 구조체에 접근하는 구조체 변수 s를 선언하겠다는 의미입니다.
또한, 기존의 변수와 구조체 변수의 사용법도 약간의 차이가 있습니다.
기존의 변수에 값을 대입하려면 a=10; 이라고 해야 했습니다.
그러나 구조체 변수에는 [변수명.접근할 멤버변수=넣을 값;]의 형태로 대입해야 합니다.
예를 들어 s.age=22;는 구조체 변수 s를 이용해 saver 구조체의 age에 22를 대입하겠다는 의미입니다.
위와 같이 main 함수에 구조체 변수를 선언할 수 있고, 구조체를 선언하고 동시에 구조체 변수를 같이 선언할 수 있습니다.
이름과 직업의 자료형은 문자형이므로 위와 같이 strcpy를 사용해서 값을 대입시켜주셔야 합니다.
이렇게 구조체를 선언한 후 중괄호 뒤에 구조체 변수를 선언하면 됩니다.
또한, 구조체 변수도 일반 변수처럼 초기화가 가능합니다.
이렇게 중괄호 { }를 이용해 초기화할 수 있습니다.
3. 중첩 구조체
중첩 반복문이 반복문 안에 반복문이 있듯이, 중첩 구조체는 구조체 안에 구조체가 들어있는 겁니다.
위 코드에서 human 구조체 안에 information의 구조체 변수 infor가 포함되있는걸 확인할 수 있습니다.
값을 넣는 방법은 기존과 비슷하나 human.infor.tall과 같이 .을 하나 더 붙여야 합니다.
4. 구조체는 왜 사용하는가
그럼 구조체는 왜 사용할까요??
구조체는 다른 타입의 변수들을 그룹화할 수 있다고 위에서 언급했습니다.
또한, 한번 만든 구조체의 형태로 여러 구조체 변수를 만들 수 있습니다.
즉, 구조체는 소비자 데이터, 학생 데이터와 같이 여러 타입의 변수가 필요하지만 의미가 동일하게 쓰이는 형태들 여러 가지 일 때 사용됩니다.
이름, 나이, 신장, 등급이 있는 학생 구조체를 선언하고 구조체 변수로 s1과 s2를 선언했습니다.
그러면 구조체의 형태는 같지만 서로 독립된 두 가지의 변수가 생긴 겁니다.
s1과 s2는 독립된 변수이므로 s1.name과 s2.name은 서로 다른 변수입니다.
이렇게 하나의 구조체를 가지고 여러 변수들의 값을 처리할 수 있습니다.
이러한 특징으로 인해 반복문을 이용해 100개의 구조체 변수들을 처리하거나 평균 수치를 구하는 등 다양한 방법으로 활용될 수 있습니다.
이번 강의는 여기까지입니다.
오늘도 수고하셨습니다.
정리
- 구조체 : 다른 타입의 변수들을 묶어서 그룹화한 자료의 형태
- 구조체의 선언은 main 함수 밖에서 한다.
- 구조체 변수를 선언해야 구조체에 접근할 수 있다.
- 하나의 구조체로 여러 구조체 변수를 선언해서 사용할 수 있다.
- 구조체 안에 다른 구조체 변수를 넣어서 중첩 구조체를 사용할 수 있다.
강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.
궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.
'C언어' 카테고리의 다른 글
세이버의 C언어 강의 26강_ 포인터란 무엇인가_Part2(다차원 포인터) (0) | 2019.07.29 |
---|---|
세이버의 C언어 강의 25강_ 포인터란 무엇인가 (0) | 2019.06.18 |
세이버의 C언어 강의 24강_ 배열이란 무엇인가_Part2(다차원 배열) (0) | 2019.06.12 |
세이버의 C언어 강의 23강_ 배열이란 무엇인가 (0) | 2019.06.02 |
세이버의 C언어 강의 22강_ 함수란 무엇인가_Part3(재귀함수) (0) | 2019.05.19 |