본문 바로가기

TIPS/C++

[TIPS] 6th 20160721_(2)

여섯번째 강좌 C++입니다


1. C의 특징

C언어는 편의점과 같은 구조로 생각하면 쉽다.

자신이 원하는 것을 빠르게 찾을 수 있다는 장점이 있지만, 편의점의 구조(데이터구조)가 변했을 때, 코드변화도 같이 생겨버린다. 이는 프로그램을 잘 하면 극복가능하긴 하다.

-코드의 유지 보수가 어렵다.

-보안에 취약하다.


2. C++의 특징

c++은 은행같은 구조로 생각하면 이해하기 쉽다. 데이터의 변화가 있어도 사용자는 그에 관해 알고있지 않아도 되기 때문에 변화의 양을 최소화 할 수 있고, 대체가 편하다. 하지만 C에 비해 느리다는 단점이 있다. 빠른 부분이 필요하다면 C코드로 작성하기도 한다.



3. 객체지향이란?

-C언어에서는 모듈이라는 개념을 제공했다. 모듈은 함수의 집합체로서 코드로 국한된 단위였다.하지만 구조체와 같이 데이터를 정의하고 관리하는 문법과는 별개로 사용되었기 때문에 어떤 정보를 표현함에 있어서 일관성이 떨어졌다.


-c++에서는 정보외 독립성과 일관성을 유지할 수 있도록, 데이터를 정의하는 구조체나 해당 구조ㅗ체를 사용하는 함수를 하나로 표현할 수 있도록 하였다. 이것을 객체(object)라고 하며 c++에서는 클래스(class)라는 문법으로 제공된다.


C언어에서 데이터는 데이터, 함수는 함수였다. 하지만 C++에서는 데이터와 함수를 함께 본다. 이렇게 데이터와 함수를 함께 보는 것을 객체지향이라고 한다.


예를 들어, 커피를 타는 일에는 두가지 종류가 있다. 바리스타가 타는 것과 커피자판기에서 나오는 것.

바리스타는 C언어라고 볼 수 있고, 커피자판기는 C++로 볼 수 있다.

바리스타의 능력에 따라 커피맛이 달라지고 더 훌륭해질 수 있다. 하지만 커피자판기는 사용자가 누구든지 균등한 맛의 커피를 뽑아낼 수 있다.

즉 C는 행위와 데이터는 별개로 보지만 C++은 "객체"를 만든다. 예에서는 자판기가 객체이다.


4. 객체 지향 용어

-인터페이스(interface function)

어떻게 구현했는지 잘 알지 못해도 그 기능을 사용할 수 있도록 제공된다.

-메소드(Method Function)

클래스 내부에서 사용되는 함수 //즉, 객체안에서 행해지는 행위이다.

-멤버 데이터

객체 안에 있는 데이터이다. 자판기의 커피, 프림, 설탕 등



5. 클래스의 구조




<클래스의 구조>


함수의 매개변수 개수나 타입이 다르면 이름이 같아도 서로 다른 함수로 생각한다.

객체생성자는 한 개 이상 사용 가능하다.

접근제한자를 이용해서 프로그래머에게 올바른 프로그램의 방향을 제시한다. private를 사용하지 않으면 그냥 구조체와 같게된다.

여기서 염두해야할 것은, 구조가 이렇게 생겼어도 실제로 class의 사이즈는 data 멤버 변수만 해당이 되고, 컴파일을 하게되면 데이터와 함수부분은 분리 다른 영역으로 가게된다.


6. 객체 생성자

- 객체 생성자 (object Constructor)

- 클래스와 동일한 이름을 가진 함수

- 객체가 생성될 때 자동으로 호출된다.

- 클래스 내의 멤버 변수를 초기화 해주는 함수

- 인자만 다른 동일한 이름의 함수가 여러 개 존재할 수 있다. (overload)

- 생략이 가능하다

- 함수의 반환형이 존재하지 않는다.


class studnet

{

privatie:

int age;

public :

student()

{

age = 0;

}

student(int a)

{

age = a;

}

};


student data;     //객체를 생성한다. allocation뿐만 아니라 객체생성자를 호출한다.(객체가 인스탄스된다.)

student data(1);     //allocation과 동시에 age를 1로 채운다.


7. 객체 파괴자

- 객체 파괴자(Object Destructor)

- 객체 생성자는 여러 개일 수 있지만 객체 파괴자는 ()인자를 줄 수 없고 반환값도 없기 때문에 없거나 단 1개만 존재한다.

- 생성되었던 객체가 더 이상 사용되지 않을 때 호출되는 함수

- 클래스 명 앞에 ~가 붙은 이름을 가진다.

- 인자가 없는 단 하나의 객체 파괴자만 가질 수 있다.

- 생략이 가능하다

- 객체가 파괴되는 시점을 알 수 없으므로 파괴자 함수를 명시적으로 호출 할 수 없다.


객체파괴자는 변수가 암시적으로 파괴되기 때문에 인자가 없다. 따라서 여러개 쓸 수도 없다!


(예시)


class Student

{

private:

int age;

public:

~Student();

};


또는 

Student::~Student()

{

printf("END");

}

로 객체파괴자를 밖에 써주어도 된다.



'TIPS > C++' 카테고리의 다른 글

[TIPS] 7th 20160725  (0) 2016.07.31