"데이터 숨기기"와 "캡슐화"의 차이점은 무엇입니까?


29

"실제로 Java 동시성"을 읽고 있는데 다음과 같이 말합니다. "다행히 캡슐화 및 데이터 숨기기와 같이 체계적으로 유지 관리 가능한 클래스를 작성하는 데 도움이되는 동일한 객체 지향 기술로 스레드 안전을 만드는 데 도움이 될 수 있습니다. 수업. "

문제 # 1-데이터 숨기기에 대해 들어 본 적이 없으며 그것이 무엇인지 모릅니다.

문제 # 2-나는 항상 캡슐화가 개인 대 공개를 사용하고 실제로 데이터 숨기기라고 생각했습니다.

데이터 숨기기가 무엇이며 캡슐화와 어떻게 다른지 설명해 주시겠습니까?


2
Code Complete 2nd edition을 읽으십시오 . 많은 질문에 답할 것입니다.
Shiplu Mokaddim은


이 링크는이 정보에 대한 유용한 정보를 제공 합니다. 설계 원칙 숨기기 , 의도하지 않은 결합을 방지하기 위해 설계 결정을 나머지 시스템에서 숨겨야한다고 지정합니다. 그것은 당신이 물건을 캡슐화하는 방법을 알려 주어야하지만, 반드시 그럴 필요는 없습니다. 캡슐화 는 프로그래밍 언어 기능입니다.
Abhijeet 2016 년

답변:


19

컴퓨터 과학 및 소프트웨어 공학에서 발견되는 데이터 및 정보 숨기기는 더 넓은 개념입니다. 변경 될 수있는 컴퓨터 프로그램 부분은 다른 모듈 / 클라이언트에서 액세스 할 수 없어야한다는 사실을 나타냅니다.

캡슐화는 객체 지향 패러다임에서 발견되는 용어로 개인 필드에 데이터를 유지하고 메소드를 통해서만 수정합니다.

따라서 캡슐화는 객체 지향 시스템에서 데이터 숨기기를 달성하는 방법으로 볼 수 있습니다 .


1
답장을 보내 주셔서 감사합니다. 데이터 숨김이 동일하지만 캡슐화보다 조금 더 넓은 이유는 여전히 이해하지 못합니다.이 책에서 비슷한 폭의 것으로서 다른 것을 포함하지 않는 것처럼 책에서 언급됩니다.
dhblah

저자는 아마도 데이터 숨기기는 데이터 구조 (개인 필드) 만 숨기고 정보 숨기기는 인터페이스를 통해서만 수행되는 구현 세부 사항 (예 : 알고리즘 사용)을 캡슐화하는 것을 의미한다는 점에서 데이터 숨기기 및 정보 숨기기와는 차이가있을 수 있습니다.
m3th0dman

2
데이터를 전혀 숨기지 않는 곳 (비공개 또는 보호 된 속성은 아님) 인 파이썬을 살펴 보지 않아도됩니다.
Latty

@Lattyware의 요점은 매우 진실되고 중요합니다. 어떤 것도 숨기지 않고, 즉 모든 멤버에 대해 사소한 게터와 세터를 맹목적으로 노출함으로써 캡슐화를 할 수 있습니다 (귀하의 정의에 따라 여기서 설명하고 있기 때문에 반대합니다). 그것은 아무것도 숨기지 않으며 아무것도 막지 않지만 편지에 대한 캡슐화의 일반적인 정의를 충족시킵니다.

1
캡슐화는 개인 필드에 데이터를 보관하지 않으므로 더 많은 정보를 숨길 수 있습니다. 캡슐화는 일반적인 방식으로 정보 / 데이터 및 메소드를 클래스로 결합 (캡슐화)하는 개념입니다.
nbro

6

캡슐화 및 데이터 숨기기는 관련 용어입니다. 이들이 추상화 와 관련하여 발생한다는 것을 이해하는 것이 중요합니다 . Booch et. 알. 에서 객체 지향 응용 프로그램으로 분석 및 설계 설명,

추상화와 캡슐화는 상호 보완적인 개념입니다. 추상화는 객체의 관찰 가능한 행동에 중점을 둔 반면 캡슐화는 이러한 행동을 일으키는 구현에 중점을 둡니다. 캡슐화는 대부분 데이터 숨기기가 아닌 정보 숨기기를 통해 이루어지며, 이는 본질적인 특성에 영향을 미치지 않는 개체의 모든 비밀을 숨기는 프로세스입니다. 일반적으로 객체의 구조와 메서드의 구현은 숨겨져 있습니다.


5

클래스 만들기에는 캡슐화 개념이 포함됩니다. 클래스를 만들면 데이터와 비헤이비어를 클래스 안에 넣고 클래스는 객체라고하는 하나의 단위가됩니다. 따라서 데이터 숨기기는 캡슐화의 일부입니다.


4

에서 위키 백과 :

프로그래밍 언어에서 캡슐화 는 두 가지 관련이 있지만 고유 한 개념 중 하나를 나타내는 데 사용되며 때로는 그 조합을 나타냅니다.

  • 일부 객체 구성 요소대한 액세스를 제한 하기위한 언어 메커니즘 .
  • 해당 데이터에서 작동하는 메서드 (또는 다른 함수)로 데이터 를 쉽게 묶을 수있는 언어 구조입니다 .

일부 프로그래밍 언어 연구자와 학자들은 객체 지향 프로그래밍의 차별화 된 기능으로 첫 번째 의미 만 사용하거나 두 번째 의미와 조합하여 첫 번째 의미를 사용하는 반면 어휘 클로저를 제공하는 다른 프로그래밍 언어는 캡슐화를 객체 방향에 직교하는 언어의 기능으로 간주합니다.

두 번째 정의는 많은 OOP 언어에서 컴포넌트를 숨기는 것이 자동이 아니거나 재정의 될 수 있다는 사실에 의해 동기가 부여됩니다. 따라서 정보 숨기기는 두 번째 정의를 선호하는 사람들에 의해 별도의 개념으로 정의됩니다.


답장을 보내 주셔서 감사합니다. 후속 질문 : 1) Java 프로그래밍 언어에는 캡슐화와 관련된 두 번째 개념이 언급하는 기능이 있습니까? 2) 왜 데이터 숨기기의 재정의가 중요한지 이해하지 못합니다. 예를 들어 자바에서는 리플렉션을 통해 모든 필드 (공개 또는 개인)에 액세스 할 수 있습니다.
dhblah

@Software Engeneering Learner : 소스 코드 구성으로서의 클래스는 두 번째 개념을 나타냅니다. 정보를 숨기는 데있어 요점은 데이터 범위를 제한하는 것이 구체적이고 별도의 언어 메커니즘을 기반으로한다는 것입니다.
마이클 보그 워드

2

그들은 종종 토론에서 상호 교환 가능하게 사용되며 종종 같은 목적을 달성하기 위해 함께 노력한다고 생각합니다. 다음은 완전히 정확하지는 않지만 구별이 필요한 경우 의미있는 구별을 제공 할 수 있습니다.

캡슐화에 대해 이야기 할 때 종종 절차 / 기능 메커니즘으로 구현됩니다. 기본 상태에 대한 가드 유형이 있으며, 가드를 통한 액세스에는 특정 프로토콜에 따라 액세스 권한이 부여되어야합니다 (원하는 상태를 읽거나 변경). 캡슐화는 액세스 (예 : 계단식 상태 변경 또는 이벤트 알림 / 건물 / 관심 사항을 읽거나 변경할 때 신호 발생)로 인해 부작용이 발생할 수있는 기회를 제공하므로 후속 조치를 시작할 수 있습니다. 다시 말하지만 캡슐화는 종종 절차로 구현되는 개념으로 생각합니다.

데이터 숨기기의 개념은 캡슐화와 비슷한 점이 있습니다. 그러나 메커니즘은 구조적이며 다른 수준에서 작동합니다. 실제로 절차를 통해 보호 및 부작용 메커니즘을 제공하는 대신 언어 및 런타임의 구조적 메커니즘을 통해 상태를 보호하고 영향을받습니다. 이러한 유형의 가드는 가시성 조항, 유형 정의, 상속 등입니다. 구조적으로 보호 된 객체에서 활용할 수있는 부작용은 언어 및 런타임에 따라 달라지는 것입니다. 즉 객체 활성화, 참조 횟수 또는 해당 라인을 따르는 것입니다.


0

그것들은 종종 상호 교환 적으로 사용되는 경우가 많습니다. 그러나 위의 Booch 인용문에 따르면 "캡슐화는 정보 숨기기를 통해 가장 자주 이루어집니다.", 즉 항상 그런 것은 아니지만 항상 그렇습니다.

파이썬은 클래스에서 데이터를 롤업 할 수 있지만 개인 변수는 허용하지 않습니다. 따라서 파이썬은 데이터 숨기기없이 캡슐화를 제공한다고 말할 수 있습니다.

모든 멤버 변수를 만들어 Java에서 동일한 작업을 수행 할 수 public있지만 모든 사람에게 심장 마비를주는 것 외에도 데이터 숨기기의 이점을 잃게됩니다. 즉, 상태에 대한 액세스를 제한하여 객체의 의미를 보존합니다.


0

OO에서 캡슐화 는 정보가 개체 내에 유지되는 곳입니다. 예를 들어,이 Personname(당신을 즉) 사람의 클라이언트를 알고 public 필드 나 접근 방법을 통해 중, 사람은 이름을 보유하고있다. 또한 글로벌 이름 배열 등으로 이름을 가질 필요가 없기 때문에 관리 할 수없는 스파게티 코드를 피하기위한 큰 단계입니다. 그러나 클라이언트는 여전히 개인이 이름을 처리하는 방법에 대해 알아야합니다 (예 : 공백 또는 쉼표로 구분)?

데이터 숨기기은 어디 Person이론 적어도, 이름 필드를 가지고 있지만 아무도 모른다 . 이 필드는 공개 접근 자 메소드가없는 개인용입니다. 클라이언트는 데이터베이스 레코드, XML, HTTP POST 등에서 이름을 전달할 수 있지만 Person이 이름을 처리하는 방법에 대한 내부 작업은 "블랙 박스"입니다. Person의 향후 구현은 예를 들어 a firstName및 a 를 갖는 것으로 자유롭게 변경할 수 있습니다 lastName.

이상적인 세계에서 데이터 숨기기는 캡슐화보다 우수하지만 모든 세계가 이상적인 것은 아닙니다. :-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.