프로그래밍 / C++ / 언리얼

Programming/C | C++ | Unreal

[C / C++] 객체지향 언어 왜 필요한가?

아트성 2022. 5. 30. 16:21

객체 지향 프로그래밍 개요.   

현대 프로그래밍의 패러다임으로 잡혀있고, 절차지향의 한계점을 극복하기위해 나타남.

 

 

 

절차지향 프로그래밍의 한계   

데이터끼리 다루는 함수가 분리되어 있다.
 - 함수 내부에서 포인터로 데이터를 다뤄야 하는 불편함이 있다.

함수의 이름을 다르게 작성해야 한다.
 - 전역 이름공간을 사용하기에, 함수마다 이름을 다르게 지어주어야한다.

 

프로그램을 확장하기 불편하다. 
 - 프로그램에 수정사항이 생기면, 포인터로 데이터 처리한 것들을 일일이 바꾸어주어야한다. 

 

 

 

객체지향 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(); // "술 마실분?"



반응형