자바의 객체와 C의 구조체

자바의 Class는 마치 C의 typedef와 비슷해보입니다. 그러나 실제로 많은 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든것이 이므로 typedef보다 훨씬 사용하기 편하다.


자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다.

자바에서 다음 구문

Class class = new Class();

는 무엇을 의미할까요?

이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다.  new와 동시에 memory allocation이 발생한 것입니다. 

메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션이 알아서 해줍니다. 로컬영역에서 빠져나오면 로컬변수가 없어지는 것 처럼.

C는 다릅니다. memory allocation을 했으면 반시드 명시적으로 memory free를 해줘야 한다.  왜냐하면 malloc는 heap영역에 메모리를 차지 하기 때문입니다. 즉 전역변수와 같은 위치에 할당된다.


위와 같은 정보를 알아야 C를 통해 자바의 객체비스므레한 것을 만들 수 있기 때문에 두리뭉실하게 설명하였습니다.

기본적인 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 Pattern' 카테고리의 다른 글

Observer 패턴  (0) 2014.10.02
State 패턴  (4) 2014.10.02
C로 Class 억지로 만들기  (1) 2014.10.02
typedef의 활용 함수포인터  (0) 2014.10.02
C 패턴을 시작하며  (0) 2014.10.01