glib5 3-2. GLib의 자료구조들 (해쉬 테이블 - GHashTable) 본 포스트를 이해하려면 해쉬 테이블에 대한 사전 지식이 필요하다. 만약 해쉬 테이블이 무엇인지 모른다면 먼저 해당 내용들에 대해서 구글링을 해 보자. 해쉬 테이블은 데이터를 Key-Value 쌍으로 관리하기 위한 자료구조이다. 하나의 Key에 하나의 Value만 저장될 수 있다. 아래는 GHashTable로 데이터 삽입, 삭제, 조회, 순회를 하는 간단한 예제이다. #include #include #include // typedef void* gpointer; // HashMap을 순회하면서 호출되는 콜백함수 static void print_film(gpointer key, gpointer value, gpointer user_data) { char *film = (char*)key; char *coun.. 2021. 12. 18. 3-1. GLib의 자료구조들 (링크드 리스트 - GList) 본 포스트를 이해하려면 링크드 리스트에 대한 사전 지식이 필요하다. 만약 링크드 리스트가 무엇인지 모른다면 먼저 해당 내용들에 대해서 구글링을 해 보자. 링크드 리스트는 자료구조책 초반부에 나오면서도 프로그래밍을 하다보면 정말 많이 사용하게 되는 자료구조이다. 개인적으로는 아마 GLib의 모든 자료구조 중에 가장 많이 사용하는 자료구조이다. 백문이불여일견으로 우선 GList로 간단히 데이터 삽입, 삭제, 순회를 하는 예제 코드를 보고, GList를 어떻게 사용하면 되는지 알아보자. #include #include // typedef void* gpointer; // 리스트를 순회하면서 호출되는 콜백함수 static void print_film(gpointer data, gpointer user_data).. 2021. 12. 17. 2. C언어의 STL, GLib ※ glibc와 혼동하지 말자. glibc(gnu c library)는 gnu에서 만든 C 표준 라이브러리이다. 반면 GLib는 gnome 재단에서 만든 서드파티 라이브러리이다. GLib는 C언어 프로그램 개발을 돕는 라이브러리이다. C언어가 개발된지 어느덧 50년이 다 되어가는 만큼 지원하는 기능이 제한적이다. 대표적으로 C언어는 표준 자료구조, 클래스, 추상화된 파일 입출력 라이브러리 등 현대 언어에서 지원하는 기능들이 빠져있다. GLib는 현대 언어들이 제공하는 고수준 기능들을 C언어에서도 사용할 수 있도록 돕는 라이브러리이다. 2.1 GLib란? 공식 GLib 문서에서는 GLib에 대해 아래와 같이 설명하고 있다. GLib is a general-purpose, portable utility li.. 2021. 12. 17. 1-2. 객체지향 C언어? (상속, 캡슐화) www.kernelpanic.kr/11 1-1. 객체지향 C언어? (클래스, 다형성) 객체지향이란? C언어의 객체지향이라는 주제로 이야기를 하려면, 우선 "객체지향"이란 무엇인지부터 짚고 넘어가야 한다. 나는 개인적으로 "클린 아키텍쳐"에서 말하는 객체지향 개념을 선호한� www.kernelpanic.kr 상속 상속은 위키백과에 다음과 같이 정의되어 있다. "상속(inheritance)은 객체들 간의 관계를 구축하는 방법이다. 클래스로 객체가 정의되는 고전 상속에서, 클래스는 기반 클래스, 수퍼클래스, 또는 부모 클래스 등의 기존의 클래스로부터 속성과 동작을 상속받을 수 있다. 그 결과로 생기는 클래스를 파생 클래스, 서브클래스, 또는 자식 클래스라고 한다." 간단하게 정리해서 여기서 다루는 상속은 부모.. 2020. 8. 26. 1-1. 객체지향 C언어? (클래스, 다형성) 객체지향이란? C언어의 객체지향이라는 주제로 이야기를 하려면, 우선 "객체지향"이란 무엇인지부터 짚고 넘어가야 한다. 나는 개인적으로 "클린 아키텍쳐"에서 말하는 객체지향 개념을 선호한다. 마틴 파울러는 클린 아키텍쳐에서 객체지향을 "객체지향이란 다형성을 이용하여 전체 시스템의 모든 소스코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력"이라고 정의한다. 이 말을 장황하게 풀어쓰면 다음과 같다. 객체지향을 활용하면 #1. SW 세부사항들이 핵심사항을 의존하도록 구성하고, #2. 각 SW 모듈간 의존성은 최소화하며, #3. 인터페이스 등을 통해 SW 다형성을 확보하여 #결론. 시스템의 개발/수정/유지보수의 용이성을 크게 높을 수 있다. 이 정의대로면 C언어로도 충분히 객체지향적인 코드를 짤 수 .. 2020. 8. 25. 이전 1 다음