함수를 포인터처럼 사용하는 방식으로, 함수명 앞에 *를 붙이면 함수 포인터가 선언된다.
함수 포인터 또한 함수이므로, 주소값을 저장한다.
메모리의 크기 및 위치가 결정되는 시점이 컴파일 시점이나 런타임 시점인데, 컴파일 시점은 정적 바인딩, 런타임 시점은 동적 바인딩이 되었다고 한다.
새로운 기능을 추가할 때 마다 다시 컴파일을 해야하는 불편함이 있는데 플러그인 방식을 사용하면 그럴 필요가없어진다.
따라서, 함수 포인터의 사용은 프로그램의 유연한 확장성을 제공한다.
하나 이상의 다양한 종류의 변수들을 하나로 묶어서, 새로운 데이터 타입을 정의하는 것이다.
연관된 데이터를 하나로 묶음으로써, 데이터 관리에 용이해지고 데이터 양이 많아질수록 유리해진다.
struct 구조체이름
{
데이터타입 : 구조체데이터1;
데이터타입 : 구조체데이터2;
데이터타입 : 구조체데이터3;
}
연습문제
1.우리가 우체국에서 물건을 어디론가 보낼 때, 물건의 종류, 무게, 높이 등의 정보를 입력한다. 이러한 정보들을 갖고 있는 물건에 대한 구조체를 만들어보자. 구조체이름은 object라고 하고, 구조체 멤버로는 이름, 높이, 무게를 가진다. 구조체 변수를 하나 선언하고, 구조체 변수를 통해 각각의 멤버의 값을 대입한다. 대입하는 값은 사용자로부터 입력 받으며, 입력이 끝나면 대입한 멤버의 값을 화면에 출력하도록 프로그램을 작성하라.
#include <stdio.h>
int main()
{
struct object
{
char name[10];
int height;
int weigth;
}obj1;
printf("물건의 이름 :");
scanf("%s",obj1.name);
printf("물건의 높이(cm) :");
scanf("%d", &obj1.height);
printf("물건의 무게(kg) :");
scanf("%d", &obj1.weigth);
printf("보낼 물건의 정보 : %s, %dcm, %dkg",obj1.name, obj1.height, obj1.weigth);
return 0;
}
공용체도 구조체와 같이 사용자 정의 자료형으로, 구조체와는 달리 메모리 공간을 공유한다.
열거형은 데이터들을 열거한 집합으로 enum이라고 한다.
컴파일러는 열거형 멤버들을 정수형 상수로 취급한다.
데이터 크기가 유동적이기 때문에, 고정시키지 않고 실행시 결정하면 메모리를 효율적으로 사용할 수 있다.
malloc()과 free()로 각각 할당과 해제를 할 수있다.
자바스크립트/타입스크립트는 객체를 사용하는 객체기반 언어고, 객체를 생성하는 원리를 이해하면 객체를 더 잘 이용할 수 있다.
추상은 대상의 특징만을 뽑아낸 것으로, 우리 일상의 사물들은 관념적, 추상적인 것들이 많다.
공통되는 특징들을 모아 추상화를 하면, 추후 다시 작성할 필요가 없어 생산성에 도움이 된다.
캡슐화는 은닉한다는 의미로, 외부에서 그 내용을 볼 수 없게한다.
외부에서 데이터를 조작하기 위한 인터페이스가 필요하다.