언어 Design Pattern - 클래스 따라하기

1096 단어 CC

요즘 객체지향 언어뿐만 아니라 요즘 나오는 언어들은 Class 제작을 지원하고 있습니다.
그러나 Class는 선언에 불과하고 그것을 사용할려면 객체를 만들어야 합니다.
구조체를 이용하면 Class와 비슷하게 사용할 수 있습니다.

다만, Class와 비슷하게 사용할 수 있어도 객체지향에서는 동적메모리와 같이 동적(Runtime)에 할당하고 헤제할 수 있지만 구조체로 Class와 비슷하게 사용할 경우 동적으로 할당 및 헤제를 할 수 없습니다.

typedef struct{
	uint16_t sum;
    void (*add)(uint16_t data);
    void (*output)(void);
    }sum_add_t;
    
 static  void add(uint16_t data);
 static void output(void);
 
 sum_add_t this = {
 	sum : 0,
    add : add,
    output : output
  };
  
  static void add(uint16_t data)
  {
  	this.sum += data;
  }
  static void output(void)
  {
  	printf("sum = %d", this.sum);
  }
  
  int main()
  {
  	for(uint16_t i = 0; i < 256, i++)
    {	
    	this.add(i);
    }
  	this.output();
  	return 0;
  } 

위에서 sum_add_t이 구조체라고 한다면 sum_add_t으로 만든 구조체 변수 this는 객체입니다. this선언과 동시에 함수들과 함수포인터를 연결 시켜주고 main문을 통해 0 ~255까지 더한값을 printf함수를 통해 출력합니다.

왜 Class처럼 사용해야 할까요? 만약 알고리즘 및 코딩이 바뀔일이 없다면 Class처럼 구현할 필요가 없습니다. 하지만 소프트웨어는 언제든 변경되어야 하므로 변경에 유연하게 대처하기 위해 위와 같은 방식을 이용합니다.

좋은 웹페이지 즐겨찾기