C에서 어떻게 Reusability, Encapsulation, Abstraction이 구현 될까?
1. Header File: 인터페이스, front-end: 캡슐화와 추상화를 할 수 있는 핵심이다.
DA_Stack_Bag.h 헤더파일 예시
Preprocessor commands: #ifndef, #define 를 활용함으로써 중복을 방지 할수 있고(.c파일이 여러개인 경우), 변화에 대응할 수있다.(TYPE이 int 에서 float으로 변경할 필요가 있는 경우)
Variable declaration: 구조체 변수를 정의 할수 있다.
Function prototypes(without body): .c 구현코드에서 사용되는 함수의 형태만 정의한다. .c 파일의 기능을 사용하는 사용자에게 .h 파일의 내용만 제공하고 .c파일은 .o 형태의 목적 코드만 제공할 수 있다. java와 같은 고수준 언어에서 interface만 제공하고 구현코드는 숨기는 것과 비슷한 원리이다.
assertTrue(EQ(getDynArr(myDA, 0), 3), "Test 1st element == 3");
...
** .c 구현파일을 기능 단위로 개발하여 재사용성을 높일 수 있고, 헤더파일로 추상화된 정보만 제공하고 캡슐화 할 수 있다. 위의 예에서 헤더파일의 typedef struct DynArr 을 통해 DynArr 중에서 공개할 변수만 공개할 수 있고, 원시 함수와 기능 명세만 제공하는 캡슐화를 통해 정보은닉이 가능하다.
객체지향의 특징과 매우 유사하다. 또한 왜 객체지향 언어가 나오게 되었는지 생각해 볼 수 있다. header 파일을 보면 사용자 구조체를 정의하고(멤버변수) 함수들의 원형(메쏘드: 인터페이스)이 정의된다.