[Cpp]객체지향 프로그래밍
📚절차적 프로그래밍
절차적 프로그래밍(Procedural Programming)은 프로그램의 기능을 함수 단위를 바탕으로 작성하는 개발 패러다임입니다. 함수는 프로시저, 메소드라고도 부르기 때문에 절차적이라고 하는 것은 함수들로 프로그램을 작성한다는 의미입니다. 절차적 프로그래밍은 간단한 구조를 가지고 복잡도가 낮아 관리가 편합니다. 주로 C언어에서 자주 사용되던 개발 방법론입니다.
📚객체지향 프로그래밍
📄객체
객체(Object)는 현실 대상을 둘러싼 대상을 의미합니다. 예를 들면 사람, 자동차, 빌딩 등이 객체들인데 이런 것들이 모여 현실 생활을 만들어냅니다. 프로그램도 이와 비슷하게 객체들로 구성된 하나의 집합입니다. 현실 세계를 모델링하여 프로그래밍 하는 방법을 객체지향 프로그래밍(Object Oriented Programming)이라고 합니다.
객체는 상태와 행동을 가지고 있습니다.
📄클래스
클래스(class)는 객체를 표현하기 위한 설계도입니다. 아래와 같이 추상적인 정보로 고양이를 묘사할 수 있습니다. 이런 추상적인 정보를 클래스라고 합니다.
1
2
3
4
5
6
7
8
9
10
class Cat
{
// 상태
char breed[];
int age;
// 행동
Meowing();
Jump();
};
📄인스턴스
추상적인 클래스에서 구체적인 객체를 생성하는 것을 인스턴스화라고 하는데 여기서 만들어진 객체를 인스턴스(Instance)라고 합니다.
1
2
3
4
5
6
7
8
9
10
// 클래스로부터 객체를 인스턴스화
Cat coco = Cat();
// 객체 상태 또는 행동에 접근
// 점 연산자 사용
strcpy(coco.breed, "Korean Shorthair");
coco.age = 1;
coco.Meowing();
coco.Jump();
📚C++ 클래스
언어 | 상태(State) | 행동(Behavior) |
---|---|---|
C++ | 멤버변수 | 멤버함수 |
C# | 필드 / 속성 | 메소드 |
📚OOP의 특징
- 객체
- 클래스
- 캡슐화
- 상속
- 다형성
📄캡슐화
캡슐화(Encapsulation)의 목적은 안에 무엇이 들어 있는지 모르게 하는 것입니다. 캡슐화는 정보 은닉의 개념으로도 사용합니다. 불필요한 정보는 노출시키지 않고 숨겨둔다는 의미입니다.
📄상속
상속(Inheritance) 또는 파생(Derivation)이라고 하는데 앞에서 예를 들었던 고양이는 동물이라는 상위 개념을 가지고 있습니다. 이런 객체의 계층 구조를 상속이라고합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Animal
{
public:
int age;
public:
void Walk();
};
class Cat : Animal
{
public:
char breed[];
public:
void Meowing();
void Jump();
};
// Cat을 인스턴스화한 coco는 Animal의 상태/행동을 모두 가지고
// Cat의 상태/행동도 가짐
Cat coco;
coco.age = 2;
strcpy(coco.breed, "Korean Shorthair");
coco.Walk();
coco.Meowing();
📄다형성
다형성(Polymorphism)은 상황에 따라 서로 다른 형태로 사용되는 것을 말합니다. 예를 들어, 하나의 객체가 어떤 경우에 동물로 취급되고 어떤 경우에는 고양이로 취급될 수 있다는 것입니다.
다형성은 포인터를 통해 얻을 수 있습니다.
1
2
3
4
5
6
7
8
9
Cat* coco = new Cat();
coco->age = 1;
// Animal의 행동을 수행할 수 있고
// Cat이라는 것을 명확하게 해준 다음
// Cat의 행동도 수행할 수 있음
Animal* a = coco;
a->Walk();
(Cat)a->Meowing();
Leave a comment