포스팅에 앞서 네이밍에 대해 알려드립니다. 클래스는 C(class)를 붙히고 멤버변수m_[타입][이름]으로 선언 합니다. m는 member의 약자입니다.
[객체지향과 클래스에 대해 시리즈]는 객체지향의 특성을 단순히 외우는 것이 아닌 이해를 바탕으로 기본을 다져 더욱 생산성있는 코드를 작성해보자 라는 취지에서 포스팅 하게 되었습니다. C++을 시작하시는 분들에게 도움이 됐으면 좋겠습니다. 차근차근 재밌게 읽어주시면 감사하겠습니다.
클래스란 어떠한 행위(동작)나 특징(성질)을 가지는 틀 입니다.
지금 당장 떠오르는 사람이나 사물이 있나요?
마침 제 옆에 핸드폰이 있네요.
아이폰, 갤럭시, V시리즈 등등 수 많은 핸드폰의 공통된 기능이 무엇일까요?
핸드폰이 가지는 공통적인 특징
1. 마이크, 스피커를 가지고 있다.
2. 디스플레이를 가지고 있다.
핸드폰이 하는 공통적인 행위
1. 마이크, 스피커로 통화 기능을 제공한다.
2. 디스플레이를 통해 유저 인터페이스를 제공한다.
핸드폰이 가지는 특징과 기능은 이것말고도 훨씬 많지만 일단 생략을 하고, 이러한 핸드폰이 가지는 공통된 속성이나 기능을 묶어 클래스로 표현하는데, 이를 추상화(abstraction)라고 합니다.
//MobilePhone.h class CMobilePhone { public: void Call(); //통화기능 제공 void Display(); //디스플레이 제공 private: bool m_bMic; //마이크 상태 bool m_bSpeaker; //스피커 상태 bool m_bDisplay; //디스플레이 상태 };
//MobilePhone.cpp void CMobilePhone::Call() { m_bMic = true; m_bSpeaker = true; std::cout << "전화 하다" << std::endl; } void CMobilePhone::Display() { //핸드폰이 귀에 가까워진다면 m_bDisplay = true; std::cout << "화면을 켜다" << std::endl; }
통화를 하기 위해서는 마이크와 스피커가 활성화 되어야하고, 폰을 귀에 갖다 대냐 아니냐에 따라 디스플레이 상태가 바뀝니다. 위 코드를 보시면 행위는 함수, 특징은 변수로 구분되는 모습입니다. 클래스 내에 선언되는 함수를 멤버함수, 변수를 멤버변수라고 부릅니다.
우리는 이 클래스란 녀석을 통해 C++의 가장 큰 특징인 객체지향을 실현할 수 있습니다. 그런데 벌써 객체지향의 특징 중 하나인 추상화를 배웠습니다. 쉽죠?
다음은 객체입니다.
객체는 클래스가 틀(설계도)라면 객체는 틀에서 생산된 실제 물체입니다. 우리는 클래스 변수를 선언함으로써 객체를 메모리에 올려야지만(객체의 인스턴스화) 객체 내부의 멤버함수든 멤버변수든 접근할 수 있습니다.
객체는 C++에서 소프트웨어 시스템을 나누는 단위 이기도 한데, 객체간의 상호작용이 쌓여 소프트웨어가 동작한다는걸 의미합니다. 동시에 C의 절차지향(함수단위)와 구분이되는 매우 중요한 개념입니다.
//main.cpp int main(void) { CMobilePhone phone; //CMobilePhone 객체 생성 phone.Call(); //멤버함수 Call() 호출 phone.Display(); //멤버함수 Display() 호출 return 0; }
main문에서 멤버함수 Call(), Display()에 접근을 해서 호출한 결과 입니다. 자세히 보면 멤버변수 m_bMic, m_bSpeaker, m_bDisplay는 멤버함수 내에서 접근됐네요? 결과적으로 말하자면 이 멤버변수는 외부(현재는 main문)에서 접근이 불가능합니다. 이 내용은 다음 포스팅에서 접근지정자와 객체지향 특징 중 하나인 캡슐화(Encapsulation)로 다루겠습니다.
결과
포스팅 내용에 오류가 있거나 지적사항이 있다면 댓글로 달아주세요. 배움을 멈추지 않는 Good Programmer가 되겠습니다. 감사합니다.
'C++' 카테고리의 다른 글
[C++] 생성자(Constructor) 소멸자(Destructor) (0) | 2020.07.19 |
---|---|
[C++] 업 캐스팅(up casting) & 다운 캐스팅(down casting) (6) | 2020.07.06 |
[C++] 객체지향과 클래스에 대해 - 다형성(Polymorphism) (0) | 2020.06.26 |
[C++] 객체지향과 클래스에 대해 - 상속(Inheritance) (0) | 2020.06.20 |
[C++] 객체지향과 클래스에 대해 - 캡슐화(Encapsulation) (0) | 2020.06.16 |
댓글