[oop] 캡슐화와 추상화의 차이점

오늘 인터뷰를 했어요. 캡슐화추상화 의 차이점에 대해 OOP 에서 질문을 받았습니다 .

나는 Encapsulation 이 기본적으로 데이터 멤버와 멤버 함수를 Class 라는 단일 단위로 바인딩 하는 것이라는 내 지식에 대해 그녀에게 대답했습니다 . 반면 추상화 및 구현의 숨기기 복잡성 기본적으로 사용자에 대한 접근의 용이성 제공합니다. 나는 그녀가 내 대답에 괜찮을 것이라고 생각했습니다. 그러나 그녀는 두 가지의 목적이 정보를 숨기는 것이라면이 둘의 실제 차이점은 무엇입니까? 나는 그녀에게 어떤 대답도 할 수 없었다.

이 질문을하기 전에이 두 OOP 개념 의 차이점에 대해 StackOverFlow의 다른 스레드를 읽었습니다 . 그러나 나는 면접관을 설득 할 수있는 위치에 있지 않다.

누구든지 가장 간단한 예를 들어 정당화 할 수 있습니까?



답변

Encapsulate 는 외부인이 직접 액세스하지 못하도록 클래스에서 자주 변경 될 수있는 변수 또는 일부 구현을 숨 깁니다 . getter 및 setter 메서드를 통해 액세스해야합니다.

추상화 는 무언가를 숨기는데도 사용되지만 더 높은 수준 (class, interface)에서 사용 됩니다. 클라이언트는 추상 클래스 (또는 인터페이스)를 사용합니다. 누구이거나 누구 였는지 신경 쓰지 않고 무엇을 할 수 있는지 알면됩니다.


답변

이 이미지는 둘의 차이를 잘 요약합니다.

여기에 이미지 설명 입력

여기에 소스


답변

추상화-객체 세트에 대한 공통 필수 특성을 식별하는 프로세스 (및이 프로세스의 결과)입니다. 추상화는 일반화의 과정이라고 말할 수 있습니다. 고려중인 모든 객체는 객체의 상위 집합에 포함되며, 모든 객체는 주어진 속성을 가지고 있지만 다른 측면에서는 다릅니다.

캡슐화-외부 세계로부터 내부 구현을 숨기기 위해이 데이터를 단일 단위로 조작하는 데이터와 함수를 묶는 프로세스입니다.

이것은 (질문과 마찬가지로) 특정 프로그래밍 언어와 관련이없는 일반적인 답변입니다. 그래서 대답은 : 추상화와 캡슐화는 공통점이 없습니다. 그러나 구현은 서로 관련 될 수 있습니다 (예 : Java에서 : 캡슐화-세부 사항은 클래스에 숨겨져 있고 추상화-세부 사항은 클래스 또는 인터페이스에 전혀 표시되지 않음).


답변

캡슐화 : 코드와 데이터를 하나의 단위로 묶습니다. Class메서드와 속성을 래핑하기 때문에 캡슐화의 예입니다.

추상화 : 내부 세부 정보를 숨기고 기능 만 표시합니다. 추상화는 객체가 수행하는 방식 대신 객체가 수행하는 작업에 중점을 둡니다. 일반화 된 클래스보기를 제공합니다.

int number = 5;
string aStringNumber = number.ToString();

여기서 ToString ()은 추상화입니다. 그리고이 메커니즘 number변수가 문자열로 변환되고 초기화되는 방법aStringNumber 은 캡슐화입니다.

계산기의 실제 사례를 살펴 보겠습니다. 캡슐화는 내부 회로, 배터리 등을 결합하여 계산기로 만듭니다. 추상화는 on-off, clear 및 작동을 위해 제공되는 기타 버튼과 같은 다른 버튼입니다.


답변

추상화 :
일반적으로 클래스 집합에 대한 다형성 액세스를 제공하기 위해 수행됩니다. 추상 클래스는 인스턴스화 될 수 없으므로보다 구체적인 표현을 만들기 위해 다른 클래스가 파생되어야합니다.

추상 클래스의 일반적인 사용 예는 콘크리트 클래스가 자체 “구체적”방식으로 구현할 수 있도록 추상 주입 지점이 도입되는 템플릿 메서드 디자인 패턴의 구현 일 수 있습니다.

참조 : http://en.wikipedia.org/wiki/Abstraction_(computer_science)

캡슐화 :
특정 클래스의 구현 복잡성을 사용할 클라이언트로부터 숨기는 프로세스입니다. “클라이언트”는 클래스를 작성한 사람이 프로그램이나 이벤트 일 수 있음을 명심하십시오.

참조 : http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)


답변

추상화, 캡슐화 및 정보 숨김의 차이점에 대한 훌륭한 기사가 있습니다. http://www.tonymarston.co.uk/php-mysql/abstraction.txt

이 기사의 결론은 다음과 같습니다.

추상화, 정보 숨김 및 캡슐화는 매우 다르지만 관련성이 높은 개념입니다. 추상화는 어떤 특정 정보를 표시해야하고 어떤 정보를 숨겨야하는지 식별하는 데 도움이되는 기술이라고 주장 할 수 있습니다. 캡슐화는 숨겨야 할 내용을 숨기고 표시 할 내용을 표시하는 방식으로 정보를 패키징하는 기술입니다.


답변

둘 다의 차이점은
클라이언트가 로직의 내부보기를 보지 못하도록하는 것이 목표 인 경우 데이터를 숨기는 데 뷰 포인트
캡슐화 단어가 사용된다는 것입니다.

추상화 단어는 우리의 목표가 고객에게 외부 뷰를 보여주는 것이라면 데이터를 숨기는 데 사용됩니다.

외부보기는

BubbleSort(){
//code
swap(x,y);
}

여기에서는 우리가 적용하는 로직을 클라이언트에게 보여주기 위해 버블 정렬에서 스왑을 사용합니다. 여기서 swap (x, y)를 전체 코드로 대체하면 단일 인스턴스에서 로직을 이해할 수 없습니다.