본문 바로가기

분류 전체보기

4-2. 캡슐화(Encapsulation) 캡슐화의 기본 개념 캡슐화란? 관련 있는 데이터오 함수를 하나의 단위로 묶는 것이다. 다시 이야기하면, 관련 있는 데이터와 함수를 클래스라는 하나의 캡슐 내에 모두 정의하는 것이다. 캡슐화가 잘 되지 않은 예 #include using std::cout; using std::endl; using std::cin; class Point { int x; //x 좌표의 범위: 0~100 int y; //y 좌표의 범위: 0~100 public: int GetX() { return x; } int GetY() { return y; } void SetX(int _x); void SetY(int _y); }; void Point::SetX(int _x) { if (_x 100) { //경계 검사 ..
4-1. 정보 은닉(Information Hiding) 정보 은닉(Information Hiding)의 필요성 #include using std::cout; using std::endl; using std::cin; class Point { public: int x; //x 좌표의 범위: 0~100 int y; //y 좌표의 범위: 0~100 }; int main(void) { int x, y; cout > x >> y; Point p; p.x = x; //문제의 원인, 멤버 변수의 외부 접근을 허용 p.y = y; //문제의 원인 cout
3-4 멤버 함수의 외부 정의 클래스 내에 모든 멤버 함수의 정의를 집어넣는 다면 클래스의 부피가 너무 커진다. 멤버 함수를 클래스 외부에 정의하기 #include using std::cout; using std::endl; const int OPEN=1; const int CLOSE=2; class Door { private: int state; public: void Open(); void Close(); void ShowState(); }; void Door::Open() { state = OPEN; } void Door::Close() { state = CLOSE; } void Door::ShowState() { cout
3-3. 클래스 멤버의 접근 제어 클래스 안에 선언되어 있는 멤버의 접근 허용 범위를 나타내는 키워드는 public, protected, private 세 가지가 있다. 클래스의 내부 접근과 외부 접근 #include using std::cout; using std::endl; class Counter { public: int val; void Increment(void) { val++; //내부 접근 } }; int main(void) { Counter cnt; cnt.val = 0; //외부 접근 cnt.Increment(); //외부 접근 cout
3-2. 클래스와 객체 데이터 추상화(Data Abstraction) 현실세계의 사물을 데이터적인 측면과 기능적 측면을 통해서 정의하는 것이 데이터 추상화이다. 여기서 데이터라는 용어는 사물의 데이터적인 측면(변수)과 기능적인 측면(함수)을 동시에 일컫는 것이다. 클래스(Class) 추상화된 데이터(데이터적 측면 + 기능적 측면)를 가지고 프로그램 코드로 옮겨 자료형을 정의하게 되는데 이때 사용되는 것이 클래스이다. 이 행위를 "클래스 화한다"라고 표현한다. 객체(Object) 클래스를 정의한다는 것은 자료형을 하나 정의하는 것이다. 자료형을 기반으로 변수를 생성하는데 클래스를 이용해서 정의된 자료형의 변수는 객체(object)라는 표현을 쓴다. 그리고 클래스를 기반으로 객체를 생성하는 것을 가리켜 "인스턴스화(instanti..