C++를 사용한 기본 객체 지향 프로그래밍 이해

전제 조건


  • 시스템에 설치된 C++ 컴파일러
  • C++의 기본 이해
  • IDE 또는 Text Editor
  • 시간
  • 열린 마음

  • 소개



    객체 지향 프로그래밍은 실생활 객체 또는 엔터티를 코드로 표현하는 프로그래밍의 패러다임입니다.
    우선, OOP에서 이해해야 하는 두 가지 기본적이지만 중요한 개념, 즉 클래스와 객체가 있습니다.

    수업이란 무엇입니까?



    클래스는 개체의 특성과 동작을 지정하는 청사진입니다. 새로운 인간 클래스를 생성한다고 가정하고 인간에게 특정한 몇 가지 속성을 지정할 수 있습니다.

    ...
    class human {
      public:
        string name;
        int age;
    };
    ...
    

    위 스니펫에서 속성이 nameage 인 클래스를 만들었습니다.

    객체란 무엇입니까?



    객체는 클래스의 인스턴스이며, 클래스의 속성이나 특성을 가정할 수 있다는 점에서 인스턴스입니다. 분명히 우리 인간은 우리 유전자의 예입니다.

    이전에 생성한 클래스를 사용하여 객체를 생성한 다음 속성nameage에 값을 할당할 수 있습니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    };
    
    int main () {
      human exhibitA;
    
      exhibitA.name = "Michael";
      exhibitA.age = 25;
    
      cout <<"Exhibit A's Name is "<< exhibitA.name << endl;
      cout <<"Exhibit A's Age is "<< exhibitA.age << endl;
    
      return 0;
    }
    

    위의 스니펫에서 우리는 클래스를 성공적으로 생성했으며 객체를 생성하고 부모 클래스에서 해당 객체 속성을 할당했습니다.



    이 시점에서 클래스와 객체가 어떻게 작동하는지 이해해야 합니다. 클래스는 하나의 개체로 제한되지 않으며 원하는 만큼 개체를 만들 수 있습니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    };
    
    int main () {
      human exhibitA;
      human exhibitB;
    
      exhibitA.name = "Michael";
      exhibitA.age = 25;
    
      exhibitB.name = "Nerfetiti";
      exhibitB.age = 24;
    
      cout <<"Exhibit A's Name is "<< exhibitA.name << endl;
      cout <<"Exhibit A's Age is "<< exhibitA.age << endl;
    
      cout <<"Exhibit B's Name is "<< exhibitB.name << endl;
      cout <<"Exhibit B's Age is "<< exhibitB.age << endl;
    
      return 0;
    }
    

    위 스니펫에서 볼 수 있듯이 새 개체가 생성되고 부모 클래스에 정의된 속성이 할당되었습니다.



    행동이란 무엇입니까?



    우리가 살펴볼 또 다른 개념은 동작입니다. 동작은 개체가 수행할 수 있는 작업입니다. 예를 들어, 인간은 달리고, 먹고, 잠을 잘 수 있습니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    
        void run () {
          cout << name <<" is running" << endl;
        }
    };
    
    int main () {
      human exhibitA;
    
      exhibitA.name = "Michael";  
      exhibitA.run();
    
      return 0;
    }
    



    위 스니펫에서 볼 수 있듯이 공개 이름 변수를 전달하여 "Michael is running"을 인쇄하는 함수가 생성되었습니다. 해당 기능/동작에 할당된 객체를 기반으로 점 표기법을 통해 해당 기능/동작에 필요한 매개변수를 전달합니다.

    과부하란 무엇입니까?



    오버로딩은 동일한 함수 이름을 사용하여 전달된 매개변수에 따라 다른 작업을 수행할 수 있도록 하는 개념입니다. 이 예에서는 매개변수 없이 하나의 매개변수와 두 개의 매개변수가 있는 새 동작eat()을 생성합니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    
        void eat () {
          cout << name <<" is eating" << endl;
        }
    };
    
    int main () {
      human exhibitA;
    
      exhibitA.name = "Michael";
      exhibitA.eat();
    
      return 0;
    }
    
    

    위에서 볼 수 있듯이 매개변수 없이 eat라는 동작을 생성했으며, 이 동작은 "Michael is eating"또는 exhibitA 이름으로 선언한 이름을 반환해야 합니다.



    계속해서 eat이라는 또 다른 동작에 대한 매개 변수를 요구하여 eat 동작을 오버로드합니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    
        void eat () {
          cout << name <<" is eating" << endl;
        }
    
        void eat (string food1) {
          cout << name <<" is eating "<< food1 << endl;
        }
    };
    
    int main () {
      human exhibitA;
    
      exhibitA.name = "Michael";
      exhibitA.eat();
      exhibitA.eat("Rice");
    
      return 0;
    }
    

    위의 스니펫에는 두 번째eat 함수가 있지만 매개변수가 필요합니다. 이 매개변수는 할당된 개체를 기반으로 "Michael is eating Rice"형식으로 전달되었습니다.



    이제 마지막으로 두 개의 매개변수를 허용하는 새로운eat 동작을 생성해 보겠습니다.

    #include <iostream>
    using namespace std;
    
    class human {
      public:
        string name;
        int age;
    
        void eat () {
          cout << name <<" is eating" << endl;
        }
    
        void eat (string food1) {
          cout << name <<" is eating "<< food1 << endl;
        }
    
        void eat (string food1, string food2) {
          cout << name <<" is eating "<< food1 << " and " << food2 << endl;
        }
    };
    
    int main () {
      human exhibitA;
    
      exhibitA.name = "Michael";
      exhibitA.eat();
      exhibitA.eat("Rice");
      exhibitA.eat("Rice", "Beans");
    
      return 0;
    }
    

    이 스니펫의 최종 출력은 "Michael is eating Rice and Beans"입니다. 마지막eat 호출은 정확히 두 개의 인수를 전달했기 때문에 human 클래스에서 선언된 두 개의 매개변수로 오버로드된eat 동작을 트리거합니다.



    선언된 다른 모든 동작eat은 이후 또는 이전에 선언된 다른 동작eat에 관계없이 여전히 작동합니다.

    결론



    이제 개체 지향 프로그래밍이 작동하는 방식에 대한 아이디어가 있어야 하지만 C++뿐만 아니라 이 개념은 다른 프로그래밍 언어에도 적용 가능하지만 구문은 다릅니다. 상속, 다형성, 데이터 추상화 및 인터페이스와 같은 개념을 놓쳤습니다. 다른 기사인 Have fun에서 이러한 개념을 다루려고 합니다.

    좋은 웹페이지 즐겨찾기