C언어에 대해 전반적으로 간단히 정리해보는 포스팅을 해보려고합니다.
[목차]
1. C 언어 개요
C언어는 JAVA와 다르게 객체지향 개념이 없는 절차적 언어입니다. 임베디드 프로그램, 운영체제 개발에 많이 사용됩니다.
코드가 순차적으로 실행되고 함수 단위로 작업이 이루어집니다.
2. C 언어 주요 특징
메모리 관리가 JAVA와 다릅니다.
자바는 가비지 컬렉션을 통해 메모리를 자동적으로 관리하는 반면, C는 malloc(), free() 함수등을 통해 메모리를 수동으로 관리합니다.
명시적으로 해제하지 않으면 메모리 누수가 발생할 수 있습니다.
또 그 유명한 포인터라는 개념이 있습니다.
포인터는 메모리 주소를 저장하는 변수인데 직접 메모리에 접근할 수 있게 합니다.
참고로 자바는 포인터 개념이 없습니다.
그리고 컴파일이 자바와 좀 다릅니다. C는 컴파일하면 소스파일(name.c)을 컴파일하여 기계어로 된 파일(name.o)을 만들어 실행합니다. 자바는 컴파일하면 바이트코드 변환되고 이후 JVM에서 실행됩니다.
3. 기본 문법 비교(JAVA, C)
C와 자바는 기본적인 문법에서 유사한 점이 많지만, 중요한 차이점도 있습니다.
우선 C는 boolean타입이 없습니다. int를 사용하여 0은 false, 1은 true로 취급합니다.
입출력은 scanf(), printf()를 사용하며 자바의 System.out.println()과 비슷한 역할을 합니다.
C는 최상단에 stdio.h라는 입출력 헤더 파일을 #include(import와 비슷한 역할)하여 내부에 있는 printf() 등의 함수를 사용할 수 있습니다.
4. 포인터
포인터는 C 언어의 핵심 개념 중 하나입니다. 포인터는 메모리 주소를 가리키는 변수입니다. 자바에는 이와 비슷한 기능이 없으므로, 새로운 개념으로 다가올 수 있습니다.
int a = 10;
int *p = &a; // 포인터 변수 p는 a의 주소를 가리킴
printf("a의 값: %d\n", a);
printf("p가 가리키는 값: %d\n", *p); // 포인터로 값에 접근
5. 함수
C에서 함수는 자바의 메서드와 비슷한 개념입니다.
반환값과 인자 타입을 명시해야 하며, 함수는 코드의 재사용성을 높입니다.
6. 동적 메모리 할당
C 언어에서는 malloc()과 free()를 사용해 메모리를 동적으로 할당하고 해제해야 합니다.
자바에서는 이런 작업을 가비지 컬렉터가 자동으로 처리합니다.
int *ptr = (int*)malloc(sizeof(int) * 5); // 정수 배열 5개 동적 할당
if (ptr == NULL) {
printf("메모리 할당 실패\n"); return 1;
}
free(ptr); // 메모리 해제
또 calloc(), realloc() 같은 다른 메모리 할당 함수들도 있는데 추후 공부하면서 계속 포스팅해보겠습니다.
7. 배열
C에서 배열은 연속된 메모리 공간에 값을 저장합니다.
자바처럼 배열 크기를 쉽게 조정할 수 없으며, 포인터와 함께 사용됩니다.
자바에서는 ArrayList같은 Collection 프레임워크를 사용하여 배열 공간을 유연하게 변경할 수 있으나 C는 그게 어렵습니다.
8. 마무리
C 언어는 낮은 수준(저레벨) 언어이기 때문에 메모리 관리와 포인터 등을 직접 다루는 것이 특징입니다.
이를 통해 시스템의 깊은 부분을 다룰 수 있지만, 그만큼 실수할 가능성도 높습니다.
C 언어를 이해하면 자바뿐만 아니라 다른 저수준 언어의 동작 원리도 쉽게 이해할 수 있습니다.
C언어에 대해서 갑자기 뜬금없이 포스팅을 했는데요.
사실 최근 알고리즘과 자료구조를 공부하기 위해 유튜브에서 추천받은 책을 구매했는데 C로 되어 있더라구요.
그래서 이번기회에 맨날 공부할까?말까? 고민했던 C도 같이 공부해보려고 합니다.
물론 어제 급하게 시작해서 아직 모르는 내용이 더 많은데요.
틈틈이 새로 공부한 내용들을 올려보겠습니다.
감사합니다!