객체 지향 프로그래밍 개요.
현대 프로그래밍의 패러다임으로 잡혀있고, 절차지향의 한계점을 극복하기위해 나타남.
절차지향 프로그래밍의 한계
데이터끼리 다루는 함수가 분리되어 있다.
- 함수 내부에서 포인터로 데이터를 다뤄야 하는 불편함이 있다.
함수의 이름을 다르게 작성해야 한다.
- 전역 이름공간을 사용하기에, 함수마다 이름을 다르게 지어주어야한다.
프로그램을 확장하기 불편하다.
- 프로그램에 수정사항이 생기면, 포인터로 데이터 처리한 것들을 일일이 바꾸어주어야한다.
객체지향 4대 개념.
캡슐화 | - 클래스(Class)를 통해 변수와 함수를 하나의 단위로 묶는 것을 의미한다. - 특징 : 이 클래스를 선언하고, 해당 클래스의 인스턴스를 통해 클래스 안에 포함된 멤버 변수와 메소드에 쉽게 접근할 수 있다. |
상속 | - 코드를 물려받는 것(부모클래스 -> 자식클래스) - class Professor : public Person ( C++ 코딩 스타일 // 물려받는 쪽 : 물려 주는 쪽 ) - 특징 : 코드 재사용. 객체지향에서는 상속을 이용하여 중복을 줄일 수 있음. |
추상화 | - 구현 세부 정보를 숨기는 일반적인 인터페이스를 정의하는 행위’ - 인터페이스 : 서로 다른 부분이 만나고 소통하거나 서로에게 영향을 미치는 영역 (휴대폰 - 자신의 전화번호, 배터리 잔량같은것들을 변수로 추상화가 가능하다.) |
다형성 | - 하나의 객체가 여러가지 형태(타입)을 가지는 것을 의미한다. 부모클래스에서 가진 함수를 자식 클래스에도 사용 할 수 있다. - 가상함수(Virtual Function) 를 사용하게 되면 부모 클래스에서 선언한 함수가 자식 클래스에서 재 정의 될 수 있다고 알려주게 된다. - 가상 함수는 인터페이스를 유지한 채로 구현 세부 사항을 바꿀 수 있다. (ex 함수 내부의 printf("억까금지") 등.. ) 이를 오버라이딩(Overriding)이라 한다. |
다형성 부연 설명 ( Modification )
class Person
{
public:
// 다형성을 이용하려면 가상 함수(Virtual Function)가 필요하다.
virtual void SaySomething()
{
printf("저는 사람입니다.");
}
};
class LeeSeungIl : public Person
{
public:
// 가상 함수는 인터페이스를 유지한 채로
// 구현 세부 사항을 바꿀 수 있다.
// 이를 오버라이딩(Overriding)이라 한다.
virtual void SaySomething() override
{
printf("억까 금지");
}
};
class JaeSung : public Person
{
public:
virtual void SaySomething() override
{
printf("술 마실분?");
}
};
LeeSeungIl seungil;
JaeSung jaesung;
// 가상 함수를 이용하려면 상위 타입의 포인터를 이용해야 한다.
Person* person = &seungil;
person->SaySomething(); // "억까 금지"
person = &jaesung;
person->SaySomething(); // "술 마실분?"
반응형
'Programming > C | C++ | Unreal' 카테고리의 다른 글
[C++] 자료구조 - 배열(Array) (1) | 2022.06.15 |
---|---|
[C++] 객체지향 심화. (1) | 2022.06.02 |
[C / C++] printf함수 구현 (putchar, putc) 이용 (1) | 2022.05.04 |
[C / C++] 문자열 주요함수 구현. (0) | 2022.05.02 |
[C++ ] 구조체 (0) | 2022.04.15 |