여러개의 다른 타입의 연관된 데이터를 묶어서 하나의 새로운 데이터 타입을 정의하는 것
struct student
{
char name[10];
int age;
int heigth;
}
ex) st1.name, st1.age, st1.height
.
(점)을 사용(직접 접근)#include <stdio.h>
#include <string.h>
struct student {
char name[10];
int age;
int height;
}st1;
int main()
{
strcpy(st1.name, "신원익"); // st1.name 변수에 문자열 카피
st1.age = 20;
st1.height = 170;
printf("이름 : %s, 나이 : %d, 키 : %d \n", st1.name, st1.age, st1.height);
return 0;
}
예를들어, 학생 정보 관리 시스템이 존재한다고 가정해보자
학생 이름, 나이, 성별 등의 정보들은 모두 변수로 선언되어 값이 저장되는데, 각각의 변수를 별도로 관리한다면 연관성을 알 수 없다
즉, 학생 한 명을 그룹으로 지정하여 이름, 나이, 성별 등의 정보들을 그룹으로 묶기 위해 구조체를 사용한다
연관된 다른 타입의 데이터를 묶어 사용자 정의 데이터 타입을 만드는 것
union unTemp
{
char a;
int b;
double c;
}
데이터를 열거한 집합
enum Week {
sun = 1,
mon,
tue,
wed,
thu,
fri,
sat,
};
int main()
{
int day;
printf("요일을 선택하세요 :");
scanf("%d", &day);
switch(day) {
case sun :
printf("일요일\n");
break;
case mon :
printf("월요일\n");
break;
case tue :
printf("화요일\n");
break;
case wed :
printf("수요일\n");
break;
case thu :
printf("목요일\n");
break;
case fri :
printf("금요일\n");
break;
case sat :
printf("토요일\n");
break;
default :
printf("잘못 입력하셨습니다.\n");
break;
}
return 0;
}
// 5(입력)
// 목요일(출력)
큐
라고도 하며, 런타임 시 메모리 할당이 이루어진다size
: 바이트 단위로 입력NULL
포인터 반환void*
의 의미 : 타입이 지정되지 않은 포인터먼저 원하는 메모리 크기만큼 할당해준 후, 형태를 정한다
void* malloc(size_t size);
#include <stdio.h>
int main()
{
int num;
int *student;
printf("학생수를 입력하세요 : ");
scanf("%d", &num);
student = (int*)malloc(sizeof(int) * num); // 포인터 student의 주소값
if(student == NULL) {
printf("메모리가 할당되지 않았습니다.\n");
return 0;
}
printf("할당된 메모리 크기는 %d입니다.\n", sizeof(int) * num);
free(student); // 할당한 것 내가 해제해줘야함
return 0;
}
student
에 주소값은 힙 메모리의 첫번째 주소값을 가리킨다free
를 사용하여 힙 메모리를 해제해줘야한다student
는 해제되더라도, 힙 메모리의 데이터는 그대로 남아있는 메모리 누수 현상이 발생한다사물을 향한다 즉, 이 세상의 모든 사물들을 프로그래밍 하겠다라는 뜻
사퀀스가 한 방향인 프로그래밍 방식
객체 단위로 프로그래밍하는 방식
객체 지향 철학에는 추상화, 캡슐화, 상속성, 다형성이 존재한다
사물의 공통점을 묶어 본질을 파악하는 행위
은닉된 데이터와 데이터에 접근할 수 있도록 해주는 메소드(인터페이스)로 구성된 클래스를 캡슐화하는 것