2016년 3월 12일 토요일

[c++] 구조체, 클래스

구조체란 다른 타입을 가지는 변수들을 하나의 이름으로 묶어둔 것이라고 할 수 있다. 그럼 구조체를 왜 사용할까? 구조체는 관련있는 데이터를 하나의 자료형으로 묶어서, 프로그램의 구현 및 관리가 용이 해진다는 장점을 가지고 있기 때문이다.
  C언어에서 구조체에 대한 불만이라고 한다면, 구조체를 기본 자료형으로 인식해 주지 않는다는 점이다. 아래 예제를 보자. 
  1. //Person이라는 사용자 정의 자료형 (Structure)  
  2. struct Person{  
  3.     int age;  
  4.     char name[10];  
  5. };   
  6.   
  7. int main()  
  8. {  
  9.     int a =10;  
  10.     Person P //C에서는 에러가 난다.   
  11.       
  12.     return 0;  
  13. }  
   C++로 넘어오면서 구조체 사용에 대해 달라진점이 있다고 하면, C에서는 구조체에 함수를 넣을 수 없었지만 C++에서는 넣을 수 있다는이고, 위의 예제와 같이 C에서는 구조체 사용을 위해서는  Person P 라고 사용하면 안된다.struct Person P 이렇게 써야 한다. C++은 기본 자료형이나 사용자 정의 자료형이나 다 동일한 자료형으로 인식함으로써 이와 같은 문법 사용이 이루어진 것이다.  또한, C에서는 사용자 정의 자료형을 가지고 +, -, * 이런 연산이 허용안되지만, C++에서 연산자 오버로딩을 통해 이런것까지도 이런것도 가능하다. 

 - C에서의 기본 자료형 : int , char, float.... 
               사용자 정의 자료형 : 구조체, 공용체(Union), enum

- C++ 에서의 기본 자료형 : C와 동일
                   사용자 정의 자료형 : C와 동일 하고 여기에 Class가 추가 되었다. 

변수와 함수를 하나로 묶어서 자료형을 정의 할 수 있는 문법적 요소 (변수 + 함수) C++에서는 구조체도 클래스의 범주에 들어가며, 클래스의 변수는 변수라고 하지 않고 객체라고 불리운다. 그럼 왜 클래스란 개념이 생겨났는가?

클래스를 설명 하기 앞서서 잠깐 객체지향을 언급해야 겠는데 객체지향이란 프로그램을 구현하는데 있어서 현실세계를 그대로 모델링을 해서 이것을 그대로 프로그래밍으로 옮겼으면 좋겠다는 생각을 모티브로 나온 것이다. 바로 현실세계에 존재하는 대상을 가지고, 자료형으로 정의 하는것이다. 하지만 현실세계의 사물들을 자료형으로 정의 하기 위해서는 데이터 추상화가 필요 한데, 데이터 추상화란 현실세계의 사물을 데이터적인 측면과 기능적인 측면을 통해서 정의 한것이라 할 수 있다. 
  이런 데이터 추상화를 거쳐서 클래스화 되고 인스턴스화(객체를 만들어내는 행위 : 일명 객체화)가 일어 난다. 

* 그럼 왜 클래스는 함수와 변수로 표현해야 될까?
 : 현실세계에 존재하는 대상을 추상화 하다 보면, 데이터적 특성도 있지만, 기능적인 측면이 있기 때문에  함수 변수 이 두개를 하나의 자료형으로 묶는 것이다. 이것이 바로 클래스이다.

댓글 없음:

댓글 쓰기

[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자.

인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해집니다. 인라인 함수의 아이디어는  함수 호출문을 그 함수의 본문으로 바꿔치기하자는 것  남발했다가는 코드의 크기가 커질 게 뻔하다. 인라인 함수로 부풀려진 ...