정보 숨김

Information hiding

컴퓨터 과학에서 정보 은닉은 컴퓨터 프로그램에서 가장 변경 가능성이 높은 설계 결정을 분리하는 원리이며, 따라서 설계 결정이 변경될 경우 프로그램의 다른 부분이 광범위한 수정으로부터 보호된다.보호에는 프로그램의 나머지 부분을 구현으로부터 보호하는 안정적인 인터페이스를 제공하는 것이 포함됩니다(상세 내용이 변경될 수 있음).다른 방법으로 기술하면 정보 숨김이란 클래스 또는 소프트웨어 컴포넌트의 특정 측면에 대한 클라이언트의 접근을 방지하는 기능으로 프로그래밍 언어 기능(프라이빗 변수 등) 또는 명시적 내보내기 정책을 사용합니다.

개요

encapsulation이라는 용어는 많은 경우 정보를 숨김과 동시에 사용됩니다.그러나 이 둘 사이의 차이점에 모두가 동의하는 것은 아닙니다.누군가 정보를 숨기는 것을 원칙으로 생각하고 캡슐화를 기술로 생각할 수도 있습니다.소프트웨어 모듈은 [1]정보를 인터페이스를 나타내는 모듈 또는 다른 구성에 캡슐화함으로써 정보를 숨긴다.

정보를 숨기는 일반적인 용도는 데이터의 물리적인 스토리지 레이아웃을 숨기는 것입니다.이 레이아웃이 변경되었을 경우 변경이 전체 프로그램의 작은 서브셋으로 제한됩니다.예를 들어, 3개부동소수점 스칼라 변수를 가진 프로그램에서 3차원 (x,y,z)이 표현되고 나중에 그 표현이 3사이즈의 단일 배열 변수로 변경되면, 정보를 염두에 두고 설계된 모듈은 이러한 변경으로부터 프로그램의 나머지를 보호할 것이다.

객체 지향 프로그래밍에서, (유형의 중첩을 통한) 정보 은닉은 불확실한 구현(설계 결정)에 대한 코드의 의존성을 잘 정의된 인터페이스로 이동시킴으로써 소프트웨어 개발 위험을 감소시킨다.인터페이스의 클라이언트는, 인터페이스만으로 조작을 실행하므로, 실장이 변경되어도 클라이언트는 변경할 필요가 없습니다.

캡슐화

Grady Boch는 객체 지향 디자인에 관한 그의 책에서 캡슐화를 "구조와 행동을 구성하는 추상화의 요소들을 구분하는 과정; 캡슐화는 추상화와 [2]그 구현의 계약상 인터페이스를 분리하는 역할을 한다"고 정의했다.

그 목적은 변경 가능성을 실현하는 것입니다.다른 컴포넌트에 영향을 주지 않고 컴포넌트의 내부 메커니즘을 개선하거나 컴포넌트를 동일한 퍼블릭인터페이스를 지원하는 다른 컴포넌트로 교체할 수 있습니다.또한 캡슐화는 사용자가 컴포넌트의 내부 데이터를 유효하지 않거나 일관성 없는 상태로 설정하지 않도록 함으로써 컴포넌트의 무결성을 보호합니다.캡슐화의 또 다른 장점은 소프트웨어 [2]컴포넌트 간의 상호의존성을 제한함으로써 시스템의 복잡성을 줄이고 견고성을 높인다는 것입니다.

이런 의미에서 캡슐화의 개념은 객체 지향 프로그래밍에서 적용되는 방식보다 더 일반적입니다.예를 들어 관계형 데이터베이스는 공용 인터페이스가 데이터베이스 관리 시스템의 모든 내부 기계 및 데이터 구조를 숨기는 쿼리 언어(SQL 등)뿐이라는 의미로 캡슐화됩니다.따라서 캡슐화는 모든 세분화 수준에서 우수한 소프트웨어 아키텍처의 핵심 원칙입니다.

인터페이스의 배후에 소프트웨어를 캡슐화하면 실제 세계에서 객체의 동작과 상호작용을 모방하는 객체를 구축할 수 있습니다.예를 들어, 간단한 디지털 알람 시계는 일반인이 사용하고 이해할 수 있는 실제 객체입니다.알람 클럭의 기능과 제공된 인터페이스(버튼 및 화면)를 통해 알람클럭의 사용법을 이해할 수 있습니다.클럭 내부의 모든 부분을 이해할 필요는 없습니다.마찬가지로, 클럭이 다른 모델로 대체된 경우, 인터페이스가 동일하게 동작하는 한, 평신도는 같은 방법으로 클럭을 계속 사용할 수 있습니다.

오브젝트 지향 프로그래밍 언어의 보다 구체적인 설정에서 이 개념은 정보 은닉 메커니즘, 번들 메커니즘 또는 둘의 조합을 의미하기 위해 사용된다.(자세한 내용은 캡슐화(개체 지향 프로그래밍)참조하십시오).

역사

정보 은닉의 개념은 David Parnas가 Parnas(1972)[3]에서 처음 기술했다.모듈러 프로그래밍 자체는 1970년 이전부터 많은 상용 사이트(특히 I/O 서브시스템 소프트웨어 라이브러리)에서 사용되었지만 모듈러 프로그래밍은 '정보 숨김' 태그를 획득하지 않고 유사한 용도로 사용되었습니다.ns 및 보다 명확한 코드 재사용 이유.

정보 은닉은 기기, 소프트웨어 또는 하드웨어를 기능 모듈로 분할하는 효과적인 기준이 됩니다.예를 들어, 자동차는 복잡한 장비이다.자동차의 설계, 제조 및 유지보수를 합리적으로 하기 위해 복잡한 기기를 설계 결정을 숨기는 특정 인터페이스를 가진 모듈로 나눕니다.이러한 방식으로 자동차를 설계함으로써, 자동차 제조업체는 생산하기에 경제적인 차량을 보유하면서 다양한 옵션을 제공할 수 있다.

예를 들어, 자동차 제조업체는 표준 버전뿐만 아니라 고급 버전의 자동차를 보유하고 있을 수 있습니다.럭셔리 버전에는 표준 버전보다 더 강력한 엔진이 탑재되어 있습니다.럭셔리 버전용과 표준 버전용 두 가지 다른 자동차 엔진을 설계하는 엔지니어들은 두 엔진에 동일한 인터페이스를 제공합니다.두 엔진은 모두 차량의 엔진 베이에 장착되며, 두 버전 모두 동일합니다.두 엔진 모두 동일한 변속기, 동일한 엔진 마운트 및 동일한 컨트롤에 장착됩니다.엔진의 차이점은 더 강력한 럭셔리 버전이 더 큰 배기량 엔진에 필요한 연료-공기 혼합물을 제공하도록 프로그래밍된 연료 분사 시스템을 통해 배기량이 더 크다는 것입니다.

더 강력한 엔진 외에도, 고급 버전은 CD 플레이어가 장착된 더 나은 라디오, 더 편안한 좌석, 더 넓은 타이어가 장착된 더 나은 서스펜션 시스템, 그리고 다양한 페인트 색상과 같은 다른 옵션들을 제공할 수 있습니다.이러한 모든 변화들로 인해, 대부분의 자동차는 표준 버전과 고급 버전 사이에서 동일합니다.CD 플레이어가 장착된 라디오는 고급 모델의 표준 라디오와 모듈을 대체하는 모듈입니다.보다 편안한 시트는 표준 시트 유형과 동일한 시트 마운트에 장착됩니다.좌석은 가죽이든 플라스틱이든 허리 지지대가 있든 없든 상관없습니다.

엔지니어들은 그 작업을 팀에 할당된 작업 조각으로 나누어 자동차를 설계합니다.그런 다음 각 팀은 컴포넌트를 특정 표준 또는 인터페이스에 따라 설계합니다.이것에 의해, 팀은 컴포넌트의 설계에 유연성을 갖게 되는 것과 동시에, 모든 컴포넌트가 서로 잘 맞도록 할 수 있습니다.

자동차 제조업체들은 비용 관리 차원에서 여러 다른 모델에 대해 동일한 코어 구조를 사용하는 경우가 많습니다.이러한 "플랫폼"은 또한 정보가 숨겨져 있는 예를 제시하는데, 이는 평면도를 세단에 사용할지 해치백에 사용할지 모르는 상태에서 구축할 수 있기 때문이다.

이 예에서 알 수 있듯이 정보 숨김은 유연성을 제공합니다.이러한 유연성은 프로그래머가 컴퓨터 프로그램이 사용자의 요구에 더 잘 맞도록 변경됨에 따라 정상적인 진화 과정에서 컴퓨터 프로그램의 기능을 수정할 수 있게 합니다.컴퓨터 프로그램이 잘 설계되어 정보 은닉 원리를 사용하여 소스 코드 솔루션을 모듈로 분해하는 경우, 이러한 변경은 일반적으로 글로벌 변경보다는 로컬 변경이기 때문에 진화적 변경은 훨씬 쉽습니다.

자동차는 운전자와 접촉하는 또 다른 예를 제공한다.이들은 표준 인터페이스(페달, 휠, 시프터, 신호, 게이지 등)를 제공하여 교육 및 면허를 취득합니다.따라서, 사람들은 새로운 모델을 운전할 때마다 완전히 다른 운전 방법을 배울 필요가 없다. (수동, 자동 변속기, 그리고 다른 차이점이 있지만, 전반적으로 자동차는 통일된 인터페이스를 유지한다.)

「 」를 참조해 주세요.

메모들

  1. ^ Rogers, Wm. Paul (18 May 2001). "Encapsulation is not information hiding". JavaWorld. Retrieved 2020-07-20.
  2. ^ a b Grady Boch, 객체 지향 분석설계 with Applications, 2007, Adison-Wesley, ISBN 0-201-89551-X, 페이지 51-52
  3. ^ Scott 2009, 페이지 173

레퍼런스