본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 24일 차 : 객체지향 프로그래밍이란?

안녕하세요 넬다이입니다.

오늘은 객체지향 프로그래밍이란? 에 대해서 정리해 보도록 할 텐데요

기존에는 C언어의 문법이나 기능을 다루었다면은 이제는 C++의 기능들을 다뤄보는 시간을 가져보겠습니다.

 

객체 지향 프로그래밍이란?

프로그램을 사람이 사는 실세계로 옮겨 놓은 형태, 자신을 나타내는 정보와 실행하는 기능을 포함한다.
클래스는 어떠한 틀을 말하며 사람이라는 클래스가 있다면 학교에 있는 실제 학생들이나 선생님들은 실체화된 객체라고 생각하면 된다.

클래스를 배우기 전에 객체 지향 프로그래밍의 특징에 대해서 알아보도록 하겠습니다.

 

추상화(abstraction)

실체를 개념화시킨 클래스 정의 작업을 뜻하며 어떤 클래스를 만들 때 포함되어야 할 특성이나 기능들을 개념화시키는 것을 추상화라고 한다.

 

캡슐화(encapsulation)

객체 지향 프로그래밍에서 외부에 노출이 되어야 하는 부분과 그렇지 말아야 할 부분으로 구별하는 작업을 말하며 실제로 구현부는 노출이 되지 않게 하고 인터페이스를 제공을 해야 할 때 캡슐화를 통해서 구현 부랑 인터페이스의 공개 여부를 처리한다.

 

상속 성(inheritance)

계층성 이라고도 말하며 승용차, 트럭, SUV 같은 비슷한 특성이나 기능들을 찾을 수 있다.
핸들, 엔진, 타이어, 휠, 엑셀이나 브레이크 전진하다, 후진하다 등등 같은 공통적인 것들을 상위에 두고 특수한 것들을 하위에 두는 것을 상속 성 혹은 계층성 이라고도 합니다.
자동차라는 것은 부모 클래스가 되는 것이고 승용차 , 트럭, suv 같은 것들은 자식 클래스가 되는 것입니다.

 

클래스는 c++에서 구조체와 거의 동일하다고 생각하시면 좋습니다.

 

간단한 예제 코드를 보겠습니다

#include <iostream>

using namespace std;

class CObj
{
private:
	int m_iA;
public:
	void SetA(int iA)
	{
		m_iA = iA;
	}
	int GetA(void)
	{
		return m_iA;
	}
public:
	void Render(void)
	{
		cout << m_iA << endl;
	}
};

void main(void)
{
	CObj obj;
	
	//private 멤버에 접근할 수 없음
	//obj.m_iA = 10;
    
	//멤버 함수는 public 이기 때문에 접근이 가능함.
	obj.SetA(10);
	obj.Render();

	cout << obj.GetA() << endl;
}

위에 보시면은 class CObj가 있고 하단 Main에서 CObj obj; 하고 obj.m_iA = 10 이 구문은 불가하다는 것을 알 수 있습니다. 그 이유는 접근제어 키워드란 것이 있는데요 이 접근 제어 키워드는 public , private , protected가 있습니다.

public - 내부, 외부 모두 접근 가능.
private - 내부에서만 접근이 가능.
protected - 부모 자식 관계에서 부모 내부, 자식 내부, 외부에서는 private

 

그렇게 때문에 private인 m_iA는 외부에서 접근이 불가능하고 내부에서만 접근이 가능하다는 이야기입니다.

 

자 오늘은 기본적으로 객체지향 프로그래밍에 대해서 배워보았는데요 어려운 내용은 없습니다 class를 어떻게 선언 정의를 하고 사용하는지에 대한 인터페이스적인 것만 기억을 해두시면 될 것 같습니다.

 

실제로 class는 struct와 동작이 같은데요 class는 기본적으로 private기반 struct는 public기반으로 되어있어서 기존 struct에 변수에 접근하실 때는 그냥 접근을 할 수 있었는데 class는 private라고 하지 않으셔도 기본적으로 private여서 접근이 불가능하며 struct에서도 private가 사용이 가능합니다.

 

[개발/C&C++] - (C/C++ 속성 정리) 23일 차 : 분활컴파일 및

[개발/C&C++] - (C/C++ 속성 정리) 22일 차 : 함수포인터를 이용한 사칙연산 계산기 만들기

[개발/C&C++] - (C/C++ 속성 정리) 21일 차 : 함수포인터

[개발/C&C++] - (C/C++ 속성 정리) 20일 차 : 레퍼런스 변수의 사용

[개발/C&C++] - (C/C++ 속성 정리) 19일 차 : 재귀 함수 및 2차원 배열

[개발/C&C++] - (C/C++ 속성 정리) 18일 차 : 리스트를 이용해서 성적표 만들기 및 설계