{{위키데이터 속성 추적}}
'''캡슐화'''({{llang|en|encapsulation}})는 [[객체 지향 프로그래밍]]에서 다음 2가지 측면이 있다:<ref>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."</ref><ref>Nell B. Dale, Chip Weems, ''Programming and problem solving with Java'', Edition 2, Jones & Bartlett Publishers, 2007, {{ISBN|0-7637-3402-0}}, p. 396</ref>
* 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고,<ref>Wm. Paul Rogers, [http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html?page=9 ''Encapsulation is not information hiding''] {{웨이백|url=http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html?page=9 |date=20131029193301 }}, JavaWorld.com, 05/18/01</ref><ref>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</ref>
* 실제 구현 내용 일부를 내부에 감추어 은닉한다.<ref>[[John C. Mitchell]], ''Concepts in programming languages'', Cambridge University Press, 2003, {{ISBN|0-521-78098-5}}, p.522</ref><ref name=Pierce>{{서적 인용|last=Pierce|first=Benjamin|authorlink=Benjamin C. Pierce|title=[[Types and Programming Languages]]|publisher=MIT Press|year=2002|isbn=0-262-16209-1}} p. 266</ref>

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

내부에 감추는 방법으로는 언어적 측면에서 접근지정자를 두어 은닉의 정도를 기술하여 구현한다. 은닉의 정도를 접근지정자로 기술하고 해당 영역에 들어가는 속성이나 메서드를 제한하면 된다. 접근지정자에 의해 제한된 멤버들은 컴파일러에 의해 판단된다. 언어적 측면에서 접근지정자에 의해 정의된 해당 멤버변수나 멤버함수는 코드 중에 접근방식을 위반한 코드를 작성하면 컴파일 오류로 처리하고 실행코드 생성을 제한한다.

== C++에서 접근지정자 ==

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

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

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

=== 접근지정자 예 ===

<syntaxhighlight lang="cpp">
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; }

// ....
};
</syntaxhighlight><br />

==[[디지털 아카이빙]]에서의 캡슐화 ==
캡슐화란 디지털 문헌의 원본을 그대로 유지하며 원본을 해석하는데 필요한 세부절차에 관한 정보, 즉 보존 메타데이터를 함께 보존하는 방식. 보존처리 기술방식의 하나이다.<ref>{{웹 인용|url=https://www.kla.kr/jsp/fileboard/termdic.do?procType=view&f_termdic_seq=4084|제목=한국도서관협회 문헌정보학용어사전 - 캡슐화|성=|이름=|날짜=|웹사이트=|출판사=|확인날짜=}}{{깨진 링크|url=https://www.kla.kr/jsp/fileboard/termdic.do?procType=view&f_termdic_seq=4084 }}</ref>
<br />
== 각주 ==
<references/>

== 같이 보기 ==
* [[구조적 프로그래밍]]
* [[객체 지향 프로그래밍]]
* [[C++]]
* [[자바 (프로그래밍 언어)|자바]]
* [[디지털 아카이빙]]

[[분류:객체 지향 프로그래밍]]
[[분류:기록학]]