[디딤돌 C++] 13. OOP 개요

OOP는 Object Oriented Programming의 약자로 캡슐화, 상속, 다형성이 주요 특징이예요.

이제 C++언어가 갖는 주요 특징인 OOP(Object Oriented Programming, 개체(객체) 지향 프로그래밍)에 관한 사항을 다루기 시작할게요.

 

특히 OOP에 관한 특징들은 클래스 문법을 통해 다룰거예요.

 

OOP란 프로그램의 세계에 현실 세계를 반영하자는 것에서 출발했어요. 우리가 사는 현실 세계는 수 많은 생명체들이 메시지를 서로 주고 받으면 살아가고 있어요. 이처럼 프로그램도 개체들이 서로 메시지를 주고 받으며 동작하게 하자는 것이죠.

 

그런데 프로그램에서는 개체를 만들기 위해서는 먼저 형식 정의가 필요해요. 현실 세계에서는 사람이나 호랑이, 음악가, 학생처럼 추상적인 개념을 정의하고 있죠.

 

마찬가지로 프로그램에서도 형식을 정의할 수 있는데 C++언어와 Java, C# 등의 OOP 언어에서는 클래스를 이용하여 형식을 정의하는 것이 가장 일반적이예요.

 

C언어의 구조체에서는 멤버 데이터를 묶어서 하나의 형식으로 만들었죠. 그런데 C++언어에서는 구조체와 클래스를 정의할 때 개체의 속성 데이터 뿐만 아니라 개체가 수행할 수 있는 행위도 형식 내부에 정의할 수 있어요.

2

이처럼 여러 개의 멤버를 하나의 형식으로 묶는 것을 캡슐화하라고 불러요. C++언어에서 캡슐화 대상은 멤버 필드(데이터)와 멤버 메서드(기능)이 있어요. 그리고 다른 형식에서 접근할 수 있는 가시성을 지정할 수 있는 접근 지정자를 제공하여 신뢰성을 높이고 있어요.

 

다음은 학생 형식을 클래스로 캡슐화한 예제 코드예요. 자세한 사항은 캡슐화 파트에서 자세하게 다룰 거예요. 가볍게 한 번 보시고 따라 작성해 보세요.

▷ 실행 결과

 

또한 대부분의 멤버가 비슷한 여러 형식의 공통점을 기반 형식으로 정의한 후에 이를 기반으로 차이가 있는 부분만 추가하여 파생 형식을 정의할 수 있는 상속에 관한 문법을 제공하고 있어요.

 

그리고 기반 형식 변수로 파생 형식 개체를 사용할 수 있게 다형성에 관한 문법도 제공하고 있죠. 특히 기반 형식에서 특정 기능에 동작을 정의하고 파생 형식에서 이를 새롭게 재정의하였을 때 개체를 사용하는 변수 형식이 아닌 실제 생성한 개체 형식에 정의한 기능을 수행할 수 있어 상속과 다형성은 프로그래밍 효율을 높여주고 있어요.

"Pianist is a Musician" 처럼 "is a"로 나타낼 수 있을 때 상속 표현을 사용할 수 있어요.

 

다음은 기반 클래스 음악가와 이를 기반으로 파생 형식 Painist를 정의하고 사용하는 예제 코드예요. 이에 관한 사항은 상속과 다형성에서 자세히 다룰 거예요. 마찬가지로 가볍게 살펴보시고 따라서 작성해 보세요.

▷ 실행 결과

 

앞으로 이 책에서는 대부분 OOP에 관한 문법과 설계에 관한 사항에 초점을 두어 설명할 거예요.


[C++ 무료 동영상 강의] 13. OOP 개요