여기에서는 Led 라는 클래스를 작성하는 예를 들어보도록 하겠다. 아두이노의 예제이지만 아두이노가 C++로 개발하므로 일반적인 클래스의 예제도 된다.
아두이노의 디지털핀에는 LED를 연결할 수 있으므로 Led 클래스는 연결된 핀 번호를 갖는 멤버가 있어야 한다. 따라서 다음과 같이 작성할 수 있다.
class Led {public: byte pin;}; |
그리고 인스턴스를 생성할 때 이 핀번호를 받도록 하려면 다음과 같이 생성자를 작성하면 될 것이다.
class Led {public:byte pin;Led(int);};Led::Led(int dp) {pin = dp;pinMode(pin, OUTPUT);} |
이렇게 작성하면 멤버 변수 pin을 외부에서 접근할 수 있다. 예를 들면
Led ledRed(12);ledRed.pin = 11; |
와 같이 인스턴스를 생성한 이후에 핀번호를 바꾸는 것이 가능하다.
그렇지만 핀번호는 한 번 초기화되면 바꿀 필요가 없으므로 궂이 외부에 노출시킬 필요가 없다. 따라서 다음과 같이 private 멤버로 지정하는 것이 바람직하다. 또한 내부 멤버임을 표시하기 위하여 첫 문자를 underscore(_)로 했다.
class Led {public:Led(int);private:byte _pin;};Led::Led(int pin) {_pin = pin;pinMode(_pin, OUTPUT);} |
또는 기본 지정자가 private 이므로 아래와 같이 작성해도 된다.
class Led {byte _pin;public:Led(int);};Led::Led(int pin) {_pin = pin;pinMode(_pin, OUTPUT);} |
하지만 명시적으로 private 키워드를 이용하여 지정해 주는 것이 가독성 측면에서 더 바람직하다. 그리고 클래스 선언에서는 public 멤버들이 먼저 오는 것이 좋다. 왜냐면 작성자가 아닌 다른 사람이 (보통 라이브러리에 포함되어 배포되는) 이 클래스를 사용하고자 한다면 public 멤버들만 알면 되지 private 멤버들은 궂이 볼 필요가 없기 때문이다.
이렇게 핀 번호를 private로 지정해 놓으면 외부에서 접근할 수 없으므로 LED를 켜고 끄는 것도 외부에서 수행할 수 없다. 하지만 멤버 함수는 내부 변수를 접근할 수 있으므로 LED를 켜고 끄는 public 멤버 함수를 다음과 같이 지정할 수 있다. 전체적인 클래스의 모양은 다음과 같을 것이다.
class Led {public:Led(int);void turnOn();void turnOff();private:byte _pin;};Led::Led(int pin) {_pin = pin;pinMode(_pin, OUTPUT);}Led::void turnOn() {digitalWrite(_pin, HIGH); // 멤버 함수는 _pin을 사용할 수 있다.}Led::void turnOff() {digitalWrite(_pin, LOW); // 멤버 함수는 _pin을 사용할 수 있다.} |
멤버 변수나 함수는 관례적으로 그 이름이 소문자로 시작하며 클래스는 대문자로 시작한다는 점을 알아두자. 이것은 식별자(이름)만 보고 타잎을 유추하기 쉽게 하기 위한 C++ 프로그램의 관례이다.
만약 12번 핀에 빨간색 LED가 연결되어 있다면 다음과 같이 Led 객체를 사용할 수 있다.
Led ledRed(12);....ledRed.turnOn();delay(500);ledRed.turnOff();delay(500);.... |
이와 같이 인스턴스의 이름도 그것으로 실제 의미를 유추할 수 있도록 작성하는 것이 프로그램의 가독성 측면에서 유리하다.
만약 11번핀에 노란색, 10번핀에 파란색 LED가 추가로 달려있다면 아래와 같이 작성할 수 있을 것이다.
Led ledRed(12), ledYellow(11), ledBlue(10); |
이후에 만약 파란색 LED를 켜고 싶다면 다음과 같이 멤버함수를 호출한다.
ledBlue.turnOn(); |
이런 식으로 클래스를 이용하여 LED를 객체화 시키면 직관적으로 프로그램을 작성할 수 있다는 장점이 있다.
C++ 강좌 전체 목록 >>>
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C++ 사용자 함수(function)의 정의 (0) | 2015.05.17 |
---|---|
C/C++ 함수(function) 개요 (0) | 2015.05.17 |
C++의 생성자와 소멸자 실행 순서 (0) | 2015.05.17 |
C++ 클래스의 소멸자(destructor) (0) | 2015.05.17 |
C++ 클래스의 기본 생성자 (default constructor) (0) | 2015.05.17 |