캡슐화

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

캡슐화(영어: encapsulation)는 객체 지향 프로그래밍에서 다음 2가지 측면이 있다:[1][2]

  • 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고,[3][4]
  • 실제 구현 내용 일부를 외부에 감추어 은닉한다.[5][6]

속성인 데이터와 메서드의 결합은 C++의 경우 멤버함수를 호출할 때 객체의 저장공간을 멤버함수에 넘겨 데이터 처리를 하도록 하는 방법을 사용한다.

외부에 감

C++에서 접근지정자[편집]

C++언어에서 은닉하는 방법으로 접근지정자를 사용한다.

다음 3가지가 있다:

  • private : 자기 클래스 내부의 메서드에서만 접근 허용
  • protected : 자기 클래스 내부 또는 상속받은 자식 클래스에서 접근 허용
  • public : 모든 접근을 허용한다.

접근이 제한된 데이터를 변경할 필요가 있을 때, 외부에서 접근할 수 있는 메서드를 제공하여 객체의 데이터를 변경하면 된다.

접근지정자 예[편집]

class Car {
// Data Fields ///////////////
public: // 지금부터 선언되는 멤버변수와 함수는 모두 접근 허용. 
   int  year;
   char maker[50];
 
protected: // 지금부터 선언되는 멤버변수와 함수는 자기 클래스와 상속 클래스에서만 접근 허용.
   int  capEngine;
 
private: // 지금부터 선언되는 멤버변수와 함수는 자기 클래스에서만 접근 허용. 
   char ecu[20];
   char colorCode[30];
 
/// Methods ///////////////////////////////////
public: 
   Car() {  }  // 생성자는 외부에서 접근 허용이 되어야 한다.
   ~Car() {  }  // 소멸자
 
   int getMkYear() { return year; }
   int getCapEngine() { return capEngine; }
 
protected: // 자기 클래스 내부와 상속클래스에서 접근 허용한다.
   char* getEcuType() { return ecu; }
   char* getColorCode() { return colorCode; }
 
// ....
};

주석[편집]

  1. Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 481: "Encapsulation mechanisms enable the programmer to group data and the subroutines that operate on them together in one place, and to hide irrelevant details from the users of an abstraction."
  2. Nell B. Dale, Chip Weems, Programming and problem solving with Java, Edition 2, Jones & Bartlett Publishers, 2007, ISBN 0-7637-3402-0, p. 396
  3. Wm. Paul Rogers, Encapsulation is not information hiding, JavaWorld.com, 05/18/01
  4. Thomas M. Connolly, Carolyn E. Begg, Database systems: a practical approach to design, implementation, and management, Edition 4, Pearson Education, 2005, ISBN 0-321-21025-5, Chapter 25, "Introduction to Object DMBS", section "Object-oriented concepts", p. 814
  5. John C. Mitchell, Concepts in programming languages, Cambridge University Press, 2003, ISBN 0-521-78098-5, p.522
  6. Pierce, Benjamin (2002). 《Types and Programming Languages》. MIT Press. ISBN 0-262-16209-1 p. 266

같이 보기[편집]