ProgrammingLang/c++

[C++ 개발자되기] 2. C++ Class의 필요성과 사용법

jinkwon.kim 2019. 7. 18. 00:19
728x90
반응형

>>[C++ 관련 모든 글 보기]

 

1. C++에서의 Class의 목적

  객체 지향 프로그래밍을 지원하기 위해 추가되었습니다.

 

2. 객체 지향 프로그래밍 이란 무엇인가? 

  프로그램을 기능 단위로 조각 내서 프로그래밍하는 것을 객체 지향 프로그래밍이라고 이해하면 됩니다.

 

3. 객체 지향 프로그래밍은 왜 필요한가?

  먼저 객체 지향 프로그래밍의 필요성을 느끼기 위해서는 절차 지향형 프로그래밍의 단점을 이해해야 합니다.

절차 지향형 프로그래밍에서의 단점은 데이터와 데이터를 처리하는 함수의 연관성이 적은 것입니다. 이것이 왜 단점 이냐면 특정 Data와 연관 있는 함수들을 절차적으로 수행하고 있는데 이때 연관이 없는 함수를 섞을 놓을 경우 코드의 분석을 어렵게 하기 때문입니다. 예를 들어 TCP Server에서 Listen을 위한 Socket을 생성하는 절차를 알아보겠습니다.

  Ex)  Socket 생성  ->  bind() -> listen()

위 예제에서는 Socket 생성으로 Client의 연결을 받을 Socket을 하나는 생성합니다. 그리고 bind와 listen 함수를 절차적으로 수행하여 생성한 Socket이 Client의 연결 요청을 받을 수 있는 상태로 변경합니다. 그런데 어느 날 개발자가 실수로 bind()와 listen() 함수 사이에 Socket과 연관성이 없는 Dummy()라는 함수를 넣었습니다. 이렇게 되면 프로그램상 동작에는 이상이 없지만 다른 개발자들이 보기에는 Dummy() 함수가 필요한 것인지 아닌지를 파악해야 합니다. 즉, 시간 낭비가 발생하는 것이죠.

 

하지만 객체 지향 프로그래밍을 하게 되면 위와 같은 문제가 어느 정도 해결됩니다. 객체 지향 프로그래밍의 목적은 프로그램을 기능 단위로 조각내어 구현하는 것이 목적입니다. 그래서 객체 지향 프로그래밍에서는 기능을 구현하기 위해서 필요한 Data와 함수를 Class 통하여 묶어 기능 구현합니다. 이로 인해 class를 통하여 개발자들 데이터를 연관된 함수를 빠르게 파악할 수 있고, 잘 정의된 Class는 분리하기가 편하기 때문에 다른 프로그램에서 다시 사용할 수 있습니다.

 

정리를 하면, 객체 지향 프로그래밍은 기능(Class) 단위로 개발한 후 기능이 서로 잘 동작하게 프로그래밍하는 방법입니다.

 

4. Class의 기본 구조

class 클래스이름
{

Private:

    - "클래스 내에 정의된 함수에서만 접근 가능한 영역"
    - "생성자 정의"

protected:

    - "상속 관계에서 자식 클래스에서 접근 가능한 영역, 
       당연히 현재 클래스 내에 정의된 함수에서도 접근 가능"

public:

    - "어디서든 접근 가능한 영역"
    - "생성자와 소멸자 함수가 정의된다."
};

 

5. Class로 객체 생성 방법

  1) 예제 Class 형태 

class Test
{
private:
  int num;
public:
  // default 매개변수 값 10으로 설정
  test(int _num=10) {
    num = _num;
  }
};

 

  1) 전역 , 지역 및 매개변수의 형태로 객체 생성

    (1) 생성 방법

      - 클래스명 객체명;       // 생성자에서 요구하는 인자가 없을 때 사용

        Ex) Test t1;

      - 클래스명 객체명(10);  // 생성자에서 요구하는 인자 가 있을때 사용

        Ex) Test t1(10);

      * 유의 사항

        클래스명 객체명();  // 이 방식은 사용할 수 없습니다. 이건 함수의 원형은 선언하는 것이기 때문입니다.

        C++에서는 함수의 원형을 함수 내부에서 선언할 수도 있습니다.

 

    (2) 객체 생명 주기

      - 객체의 생명 주기가 끝나면 자동으로 소멸자 함수를 호출한다.

      a. 전역 객체 : 프로그램이 종료될 때까지

      b. 함수 내에 생성된 객체 : 함수가 끝날 때까지

 

  2) 동적 할당 형태로 객체 생성

    (1) 생성 방법 

      - 클래스명 *객체명 = new 클래스;    // 생성자에서 요구하는 인자가 없을 때 사용

         Ex) Test *t1 = new Test;

      - 클래스명 *객체명 = new 클래스();  // 생성자에서 요구하는 인자가 없을 때 사용

         Ex) Test *t1 = new Test();

      - 클래스명 *객체명 = new 클래스(10);  // 생성자에서 요구하는 인자가 있을 때 사용

         Ex) Test *t1 = new Test(10);

 

    (2) 객체 생명 주기

      - delete로 객체를 해제할 때까지

      - delete를 사용하여 객체를 해제 하지 않으면 소멸자 함수를 호출하지 않는다.

      delete 객체명; 

        Ex) delete t1;

 

6. 상속

  1) 의미 

    - 쉽게말해 다른 class기능을 마치 내것 처럼 사용하겠다는 의미

      (Ex) 아버지의 도구를 내가 사용 할 수 있는 것과 같은것)

  1) 구문

class 클래스명 
{
  // .. 
};
class 클래스명 : 접근제한자 클래스명 
{ 
  // .. 
}

Ex) B Class의 A Class 상속
Class A
{

}

class B : public A
{

}

  2) 상속시 접근 제한자의 종류 

    (1) public

      - A의 기능을 B를 생성만 하면 누구나 쓸수 있다.

    (2) proteced

      - A의 기능은 B의 함수 내부에서 밖에 못쓴다.

    (3) private

      - A의 기능은 B도 쓸수 없다.  (상속의 의미가 없음)

 

>>[C++ 관련 모든 글 보기]

728x90
반응형