typedef
typedef는 기존의 자료형을 바탕으로 새로운 자료형을 만들기 위해 사용한다.
- 예
typedef "기존 자료형" "새로운 자료형 이름"
int age;
- age라는 변수를 선언한다.
이 변수는 메모리 공간에 int형 크기의 공간을 할당받는다.
typedef int age;
- 새로운 자료형 age를 선언한다.
age의 타입은 int 타입이다.
age me, you;
- age 타입의 변수 me와 you를 선언한다.
typedef를 이용해 함수 포인터 재정의하기
void test(void);
- 반환값과 매개변수가 없는 함수를 선언한다.
void (*func)(void);
- 반환값과 매개변수가 없는 함수를 가리킬 수 있는 함수 포인터를 선언한다.
typedef void(*func_t)(void);
- 새로운 자료형 func_t를 선언한다.
- func_t는 반환값과 매개변수가 없는 함수를 가리킬 수 있는 함수 포인터 타입이다.
- 관례상 typedef를 이용해 재정의한 타입은 _t를 붙여준다.
func_t func
- 반환값과 매개변수가 없는 함수를 가리킬 수 있는 함수 포인터 타입의 변수 func를 선언한다.
- 두 번째 둥근 블릿과 동일한 의미를 갖는다.
함수의 포인터 활용
함수를 호출할 때는 함수의 포인터 주솟값으로 접근할 수 있다.
그래서, 메모리 상에서 할당된 함수의 포인터 주소값으로 접근을 해서 함수를 마치 변수를 포인터로 접근하듯이 사용하는 것과 같이 똑같이 활용한다.
함수의 매개변수를 특정 타입으로 지정해두고, 다른 함수 타입으로 선언하면,
함수의 매개변수에 다른 함수를 매개변수로 사용할 수 있다.
# 아래와 같이 함수의 포인터로써 매개변수로써 함수를 활용할 수 있다.
typedef void (*func_t)(void);
void ProxyHello(func_t func);
int main(){
for (int i = 0; i < 5; i ++){
ProxyHello(Hello);
}
return 0;
}
void ProxyHello(func_t func) {
func();
}
# 정리
함수의 포인터를 사용함으로써, 코드의 재사용을 해낼 수 있고,
이에 따라 코드의 작성 비용을 줄일 수 있다.
지금까지 C언어 포인터를 다뤄본 결과
객체 지향의 객체를 생성해서 객체를 관리하듯이,
포인터로 형식을 지정해두고, 이에 따른 형식으로 함수를 활용한다는 점이다.
# 수업 들으면서 생긴 궁금점
"객체 지향 프로그래밍과 비슷한 면모를 따르는 것 같은데,
이렇게 이해해도 되는 건가?"
'CS 대학강의' 카테고리의 다른 글
[CS 1-2 | 프로그램 설계 방법론] JAVA로 블랙잭 프로그램 제작 (0) | 2022.11.16 |
---|---|
[CS 1-2 | 시스템 프로그래밍 기초] 시스템 프로그래밍 기초 - #16 [문자열] (0) | 2022.11.15 |
[CS 1-2 | 프로그램 설계 방법론] Java GUI로 슬라이드 퍼즐게임 제작 13주차 (0) | 2022.11.11 |
[CS 1-2 | 대학생을 위한 실용금융] 신용관리 10주차 (0) | 2022.11.09 |
[CS 1-2 | 프로그램 설계 방법론] abstract 클래스, Interface, 상속이란 (0) | 2022.11.09 |