언어 자료구조 알고리즘/C 언어 문법

4. 형식(type -자료형)

언제나휴일 2009. 8. 19. 05:47
반응형
형식(type -자료형)

  

다루는 내용

    - 형식의 종류

    - 형식에 따른 메모리

 

 1. 형식이란?

 프로그래밍 언어에 있어서 형식은 프로그램에 사용될 데이터의 종류에 따라 메모리의 크기에 대한 약속이다.

형식은 프로그램 코드상의 표현값과 메모리에 저장되는 값에 대한 약속이다.

형식은 데이터 인스턴스를 만들기 위한 도구이다.

 

2. 형식의 종류

 형식은 크게 예약어로 제공되는 기본 형식과 메커니즘을 통해 변수를 선언할 수 있는 형식 그리고, 사용자 정의 형식으로 나눌 수 있다. 

 

 

 

  기본 형식

 예약어로 제공되는 기본 형식은 프로그램 종류와 상관없이 대부분 프로그램에서 필요로 하는 데이터 형식이 있다.  이러한 것들 중 할당할 메모리 크기가 정할 수 있는 것들에 대해서는 대부분 예약어로 제공을 해 주고 있다. 

 

 C언어에서 예약어로 제공하는 기본 형식은 크게 문자형, 정수형, 실수형으로 나눌 수가 있는데 안타깝게도 문자열의 경우는 기본 형식으로 제공하고 있지 않고 사용자가 메커니즘 형식을 통해 변수나 상수를 선언 및정의를 하여 사용할 수 있도록 제공을 하고 있다. 

기본 형식

char, unsigned char, signed char 1 byte
short, unsigned short 2 bytes
int, unsigned int 2or4 bytes
long, unsigned long 4 bytes
float 4 bytes
double 8 bytes

 

 

메커니즘 형식

 프로그램 종류에 상관없이 대부분 프로그램에서 필요로 하지만 실제 할당할 메모리 크기가 사용자에 의해 결정을 해야 되는 경우가 있다.  가령, '학생 n명으로 구성된 학급을 어떻게 표현을 해야지'와 같은 상황 정도로 생각을 하자.

 

 또한, C언어에서는 시스템의 메모리를 사용자가 목적에 따라 유연하게 사용할 수 있도록 메모리 주소를 값으로 지닐 수 있는 포인터를 제공하고 있다.  여기서 '유연하다'에 따른 사용자의 책임은 막중하다.  아무것도 모르는 우리의 고객인 end-user에게 피해가 가지 않도록 주의하여 '신뢰'할 수 있는 프로그램을 작성하도록 하자.

 

메커니즘 형식

배열 원소형식 사이즈 * 원소 개수 bytes
포인터 4bytes
  

-사용자

 사용하는 것이 무엇이냐에 따라 개발자, O/S, 응용 등 다양한 것이 될 수 있다. 

 이 책에서 대부분 사용자는 C언어를 사용하는 사용자를 의미한다.  즉, 개발자라 생각해도 무방하다.  

-end-user

 최종 사용자를 의미 한다.

 이 책에서는 프로그램 사용자를 얘기할 때는 되도록 end-user라 언급하겠다.

 

 

사용자 정의 형식

 대부분 언어에서는 프로그램마다 정의해야 하는 특수한 데이터 인스턴스의 형태를 미리 분석하여 추상화 시킬 수 있도록 사용자 정의 형식을 제공하고 있다. 

 

 가령, 학생 관리 프로그램에서는 학생 데이터 형식이 필요할 것이고 고객 관리 프로그램에서는 고객 데이터 형식이 필요할 것이다.  이처럼 해당 데이터 형식에 여러 가지의 멤버 요소를 갖는 형식을 위해 구조체(struct)를 제공하고 있다.

 

 또한, 네트워크를 사용하기 위한 소켓 라이브러리와 같은 곳에서는 네트워크의 종류에 따라 주소 체계가 틀리고 메모리 사이즈가 다르지만 동일한 이름으로 취급할 수 있는 기능이 있을 것이다.  이런 경우에 라이브러리 사용자는 네트워크 종류에 따라 같은 기능을 갖는 여러 함수를 기억하는 것 보다는 하나의 함수를 사용하는 것이 편리할 것이다.  이러한 경우에 사용할 수 있도록 여러 멤버로 구성되어 있지만 해당 형식의 인스턴스는 하나의 멤버만 유용할 것인데 이를 위해 공용체(union)을 제공하고 있다.

 

 마지막으로 데이터 인스턴스에 지정될 값이 종류가 한정되어 있을 때(성별 - 남, 여) 이들을 약속해서 사용하기 쉽게 하기 위해 열거형을 제공하고 있는데 C언어에서는 int형으로 취급이 되고 정의한 값이 아닌 정수값이 오는 것에 대한 모든 책임을 사용자에게 맡기고 있다.  C++이나 다른 언어에서는 이러한 부분에 대해 언어에서 컴파일 에러를 뜨게 함으로써 사용자가 정확히 사용할 수 있게 신뢰성을 제공하고 있지만 C언어는 그렇지 않다.  역시 '유연함'을 강조하다 보니 '신뢰성'에 대한 부분에 대해서는 사용자가 유연함을 제공받는 만큼 책임을 져야 할 것이다.  반드시 '신뢰'할 수 있는 프로그램을 만드는 개발자가 되기를 바란다.

 

사용자 정의 형식(UDT)

구조체(struct) 멤버 사이즈의 합 + padding
공용체(union) 제일 큰 멤버 사이즈 bytes
열거형(enum) 4bytes

반응형