객체 지향 프로그래밍 - 이름에서 알 수 있듯이 프로그래밍에서 객체를 사용합니다. 객체 지향 프로그래밍은 프로그래밍에서 상속, 숨기기, 다형성 등과 같은 실제 엔터티를 구현하는 것을 목표로 합니다. OOP의 주요 목적은 데이터와 이에 대해 작동하는 함수를 결합하여 해당 함수 외에는 코드의 다른 부분이 이 데이터에 액세스할 수 없도록 하는 것입니다.
OOP의 구성 요소 역할을 하는 몇 가지 기본 개념이 있습니다.
- 수업
- 사물
- 캡슐화
- 추출
- 다형성
- 계승
- 동적 바인딩
- 메시지 전달
객체지향 프로그래밍 언어의 특징
파이썬에서 s는 무엇입니까?
수업
객체 지향 프로그래밍으로 이어지는 C++의 빌딩 블록은 클래스입니다. 이는 해당 클래스의 인스턴스를 생성하여 액세스하고 사용할 수 있는 자체 데이터 멤버와 멤버 함수를 보유하는 사용자 정의 데이터 유형입니다. 클래스는 객체의 청사진과 같습니다. 예를 들어: 자동차 등급을 생각해 보세요. 서로 다른 이름과 브랜드를 가진 많은 자동차가 있을 수 있지만 모두 4개의 바퀴, 속도 제한, 마일리지 범위 등을 갖는 것과 같은 몇 가지 공통 속성을 공유합니다. 따라서 여기서는 자동차가 클래스이고 바퀴, 속도 제한이 있습니다. , 마일리지가 해당 속성입니다.
- 클래스는 데이터 멤버와 멤버 함수를 포함하는 사용자 정의 데이터 유형입니다.
- 데이터 멤버는 데이터 변수이고 멤버 함수는 이러한 변수를 함께 조작하는 데 사용되는 함수입니다. 이러한 데이터 멤버와 멤버 함수는 클래스에 있는 개체의 속성과 동작을 정의합니다.
- 위 Car 클래스의 예에서 데이터 멤버는 속도 제한, 주행 거리 등이 될 것이며 멤버 함수는 브레이크 적용, 속도 증가 등을 수행할 수 있습니다.
우리는 다음과 같이 말할 수 있습니다. C++ 클래스 몇 가지 공통 속성과 동작을 공유하는 개체 그룹을 나타내는 청사진입니다.
물체
객체는 몇 가지 특성과 동작을 가진 식별 가능한 엔터티입니다. 객체는 클래스의 인스턴스입니다. 클래스가 정의되면 메모리가 할당되지 않지만 인스턴스화(객체 생성)되면 메모리가 할당됩니다.
C++ // C++ Program to show the syntax/working of Objects as a // part of Object Oriented PProgramming #include using namespace std; class person { char name[20]; int id; public: void getdetails() {} }; int main() { person p1; // p1 is a object return 0; }> 객체는 메모리 공간을 차지하며 파스칼이나 구조체 또는 공용체의 레코드와 같은 연관된 주소를 갖습니다. 프로그램이 실행되면 객체는 서로에게 메시지를 보내 상호 작용합니다. 각 개체에는 데이터와 데이터를 조작하는 코드가 포함되어 있습니다. 개체는 서로의 데이터나 코드에 대한 세부 정보를 알 필요 없이 상호 작용할 수 있습니다. 허용되는 메시지 유형과 개체가 반환하는 응답 유형을 아는 것만으로도 충분합니다.
C++ 개체 및 클래스에 대한 자세한 내용은 이 문서를 참조하세요. C++ 클래스 및 개체
캡슐화
일반적으로 캡슐화는 데이터와 정보를 단일 단위로 묶는 것으로 정의됩니다. 객체 지향 프로그래밍에서 캡슐화는 데이터와 이를 조작하는 함수를 함께 바인딩하는 것으로 정의됩니다. 캡슐화의 실제 예를 생각해 보면 회사에는 계정 섹션, 재무 섹션, 판매 섹션 등과 같은 다양한 섹션이 있습니다. 재무 섹션은 모든 금융 거래를 처리하고 재무와 관련된 모든 데이터 기록을 유지합니다. 마찬가지로 판매 섹션에서는 모든 판매 관련 활동을 처리하고 모든 판매 기록을 유지합니다. 이제 어떤 이유로든 재무 부서 직원이 특정 달의 판매에 대한 모든 데이터가 필요한 상황이 발생할 수 있습니다. 이 경우 판매 섹션의 데이터에 직접 접근할 수 없습니다. 그는 먼저 판매 부서의 다른 담당자에게 연락한 다음 특정 데이터를 제공하도록 요청해야 합니다. 이것이 바로 캡슐화입니다. 여기서는 영업 부문의 데이터와 이를 조작할 수 있는 직원을 단일 이름의 영업 부문으로 묶습니다.

C++의 캡슐화
캡슐화는 또한 데이터 추상화 또는 데이터 숨기기 . 캡슐화를 사용하면 데이터도 숨겨집니다. 위의 예에서 판매, 재무 또는 계정과 같은 섹션의 데이터는 다른 섹션에서 숨겨집니다.
캡슐화에 대해 더 자세히 알아보려면 이 문서를 참조하세요. C++의 캡슐화
추출
데이터 추상화는 C++의 객체 지향 프로그래밍의 가장 필수적이고 중요한 기능 중 하나입니다. 추상화란 필수 정보만 표시하고 세부 정보는 숨기는 것을 의미합니다. 데이터 추상화란 데이터에 대한 필수 정보만 외부에 제공하고 배경 세부 정보나 구현을 숨기는 것을 말합니다. 자동차를 운전하는 남자의 실제 사례를 생각해 보십시오. 남자는 가속 페달을 밟으면 자동차의 속도가 빨라지고, 브레이크를 밟으면 차가 멈출 것이라는 것만 알지만, 가속 페달을 밟으면 속도가 실제로 어떻게 증가하는지 모르고, 자동차의 내부 메커니즘에 대해 알지 못합니다. 자동차에 가속기, 브레이크 등을 구현합니다. 이것이 바로 추상화입니다.
- 클래스를 사용한 추상화 : 클래스를 사용하여 C++에서 추상화를 구현할 수 있습니다. 클래스는 사용 가능한 액세스 지정자를 사용하여 데이터 멤버와 멤버 함수를 그룹화하는 데 도움이 됩니다. 클래스는 외부 세계에 표시할 데이터 멤버와 그렇지 않은 데이터 멤버를 결정할 수 있습니다.
- 헤더 파일의 추상화 : C++의 또 다른 추상화 유형은 헤더 파일일 수 있습니다. 예를 들어, math.h 헤더 파일에 있는 pow() 메서드를 생각해 보세요. 숫자의 거듭제곱을 계산해야 할 때마다 단순히 math.h 헤더 파일에 있는 pow() 함수를 호출하고 함수가 실제로 숫자의 거듭제곱을 계산하는 기본 알고리즘을 알지 못한 채 숫자를 인수로 전달합니다. .
C++ 추상화에 대한 자세한 내용은 이 문서를 참조하세요. C++의 추상화
다형성
다형성이라는 단어는 다양한 형태를 갖는다는 것을 의미합니다. 간단히 말해서, 다형성을 메시지가 두 가지 이상의 형식으로 표시되는 능력으로 정의할 수 있습니다. 사람은 동시에 다른 특성을 가질 수 있습니다. 남자는 동시에 아버지이자 남편이자 직원이다. 따라서 같은 사람이라도 상황에 따라 다른 행동을 보입니다. 이것을 다형성이라고 합니다. 작업은 여러 인스턴스에서 서로 다른 동작을 나타낼 수 있습니다. 동작은 작업에 사용되는 데이터 유형에 따라 달라집니다. C++에서는 연산자 오버로딩과 함수 오버로딩을 지원합니다.
- 연산자 오버로딩 : 연산자가 여러 인스턴스에서 서로 다른 동작을 나타내도록 만드는 프로세스를 연산자 오버로딩이라고 합니다.
- 함수 오버로딩 : 함수 오버로딩은 단일 함수 이름을 사용하여 다양한 유형의 작업을 수행하는 것입니다. 다형성은 상속 구현에 광범위하게 사용됩니다.
예 : 일부 정수를 추가하는 함수를 작성해야 한다고 가정합니다. 때로는 2개의 정수가 있고 때로는 3개의 정수가 있습니다. 서로 다른 매개변수를 갖는 동일한 이름의 Addition Method를 작성할 수 있으며 해당 메소드는 매개변수에 따라 호출됩니다.

C++의 다형성
세상에서 가장 멋진 미소
다형성에 대한 자세한 내용은 이 기사를 참조하십시오. C++의 다형성
계승
다른 클래스에서 속성과 특성을 파생시키는 클래스의 기능을 호출합니다. 계승 . 상속은 객체지향 프로그래밍의 가장 중요한 기능 중 하나입니다.
- 하위 클래스 : 다른 클래스로부터 속성을 상속받는 클래스를 하위 클래스(Sub class) 또는 파생 클래스(Derived Class)라고 합니다.
- 슈퍼 클래스 : 하위 클래스에 속성이 상속되는 클래스를 기본 클래스 또는 슈퍼클래스라고 합니다.
- 재사용 성 : 상속은 재사용성 개념을 지원합니다. 즉, 새 클래스를 만들고 싶고 원하는 코드 중 일부를 포함하는 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생시킬 수 있습니다. 이렇게 하면 기존 클래스의 필드와 메서드를 재사용할 수 있습니다.
예 : Dog, Cat, Cow는 Animal Base Class의 Derived Class가 될 수 있다.

C++의 상속
상속에 대한 자세한 내용은 다음 문서를 참조하세요. C++의 상속
스피커가 뭐야?
동적 바인딩
동적 바인딩에서는 함수 호출에 응답하여 실행될 코드가 런타임에 결정됩니다. C++에는 가상 기능 이것을 지원하기 위해. 동적 바인딩은 유연하기 때문에 빌드 시 함수 호출과 정의를 연결하는 정적 바인딩의 단점을 방지합니다.
예:
C++ // C++ Program to Demonstrate the Concept of Dynamic binding // with the help of virtual function #include using namespace std; class GFG { public: void call_Function() // function that call print { print(); } void print() // the display function { cout << 'Printing the Base class Content' << endl; } }; class GFG2 : public GFG // GFG2 inherit a publicly { public: void print() // GFG2's display { cout << 'Printing the Derived class Content' << endl; } }; int main() { GFG geeksforgeeks; // Creating GFG's object geeksforgeeks.call_Function(); // Calling call_Function GFG2 geeksforgeeks2; // creating GFG2 object geeksforgeeks2.call_Function(); // calling call_Function // for GFG2 object return 0; }> 산출
Printing the Base class Content Printing the Base class Content>
보시다시피 부모 클래스의 print() 함수는 파생 클래스 객체에서도 호출됩니다. 이 문제를 해결하기 위해 가상 함수를 사용합니다.
위의 가상 기능 예시:
C++ #include using namespace std; class GFG { public: void call_Function() // function that call print { print(); } virtual void print() // using 'virtual' for the display function { cout << 'Printing the Base class Content' << endl; } }; class GFG2 : public GFG // GFG2 inherit a publicly { public: void print() // GFG2's display { cout << 'Printing the Derived class Content' << endl; } }; int main() { GFG geeksforgeeks; // Creating GFG's object geeksforgeeks.call_Function(); // Calling call_Function GFG2 geeksforgeeks2; // creating GFG2 object geeksforgeeks2.call_Function(); // calling call_Function // for GFG2 object return 0; } //this code is contributed by Md Nizamuddin> 산출
Printing the Base class Content Printing the Derived class Content>
메시지 전달
개체는 정보를 보내고 받음으로써 서로 통신합니다. 개체에 대한 메시지는 프로시저 실행에 대한 요청이므로 수신 개체에서 원하는 결과를 생성하는 함수를 호출합니다. 메시지 전달에는 객체 이름, 함수 이름, 전송할 정보를 지정하는 작업이 포함됩니다.
예:
C++ #include using namespace std; // Define a Car class with a method to display its speed class Car { public: void displaySpeed(int speed) { cout << 'The car is moving at ' << speed << ' km/h.' << endl; } }; int main() { // Create a Car object named myCar Car myCar; // Send a message to myCar to execute the displaySpeed method int currentSpeed = 100; myCar.displaySpeed(currentSpeed); return 0; } //this code is contributed by Md Nizamuddin>
관련 기사 :