자바의 Class와 C의 typedef는 많이 비슷해보입니다.
그러나 실제로 좀 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든 것이기 때문에 typedef보다 훨씬 사용하기 편리합니다. 가장 큰 차이점은 동적인 할당과 해제를 JVM에서 자동으로 해준다는 것이지요.
자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다.
자바에서 다음 구문
Class class = new Class();
는 무엇을 의미할까요?
이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다. new와 동시에 memory allocation이 발생한 것입니다.
메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션이 알아서 해줍니다. 로컬영역에서 빠져나오면 로컬변수가 없어지는 것과 비슷하지요.
C는 다릅니다. memory allocation을 했으면 반시드 명시적으로 memory free를 해줘야 한다. 왜냐하면 malloc는 heap영역에 메모리를 차지 하기 때문입니다.
기본적인 C의 구조체를 typedef를 통해 만들어 보겠습니다.
typedef struct
{
char a;
char b;
char c;
}Example;
초기화는 아래와 같이 하면 됩니다.
Example example;
example.a = 'a';
example.a = 'b';
example.a = 'c';
혹은,
Example example = {'a', 'b', 'c'};
이렇게 초기화 해도 됩니다.
보통 변수를 로컬에서 선언하면 stack에 메모리가 잡히고, static이나 전역으로 선언하면 heap영역 이전의 영역에 컴파일러에 의해 메모리가 잡힙니다.
자바의 Class, C의 구조체는 기본 type 이외의 복합적인 새로운 type을 만는다는 점에서 비슷합니다.
차이점은 자바의 Class는 new라는 명령어를 통해 동적인 할당이 가능한 반면 C는 수동으로 모든걸 만들어 줘야 한다는 것입니다.
추후 포스팅에서 자세히 알아보도록 하겠습니다.
'▶ C Application > 디자인 패턴' 카테고리의 다른 글
C언어에서의 this 구현 (1) | 2023.12.06 |
---|---|
C언어로 만드는 Interface (1) | 2023.12.06 |
C언어로 객체 지향 Class 흉내내기 (0) | 2023.12.06 |
typedef의 활용과 함수포인터 (0) | 2023.11.23 |
C언어 디자인 패턴을 시작하며 (0) | 2023.11.20 |