Nice programing

캡슐화와 추상화의 차이점

nicepro 2021. 1. 7. 21:20
반응형

캡슐화와 추상화의 차이점


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

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

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

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


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

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


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

여기에 이미지 설명 입력

여기에 소스


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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

외부보기는

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

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


캡슐화 :

약 캡슐과 같은 것을 숨기고 있습니다. 우리는 캡슐에 무엇이 있는지 모르고 그냥 가져갑니다. 프로그래밍에서와 동일-메소드 또는 속성의 특수 코드를 숨기고 캡슐과 같은 출력 만 제공합니다. 간단히 말해서 캡슐화는 데이터를 숨 깁니다.

추출:

추상화는 논리 또는 구현을 숨기는 것을 의미합니다. 예를 들어, 우리는 정제를 복용하고 그 색깔을 보았지만 이것의 목적이 무엇인지, 그리고 그것이 신체와 어떻게 작용하는지 모릅니다.


추출

Java에서 추상화는 정보를 실제 세계에 숨기는 것을 의미합니다. "서비스를 이용하기 위해 무엇을해야하는지"를 알리기 위해 당사자 간의 계약을 성립합니다.

Example, In API development, only abstracted information of the service has been revealed to the world rather the actual implementation. Interface in java can help achieve this concept very well.

Interface provides contract between the parties, example, producer and consumer. Producer produces the goods without letting know the consumer how the product is being made. But, through interface, Producer let all consumer know what product can buy. With the help of abstraction, producer can markets the product to their consumers.

Encapsulation:

Encapsulation is one level down of abstraction. Same product company try shielding information from each other production group. Example, if a company produce wine and chocolate, encapsulation helps shielding information how each product Is being made from each other.

  1. If I have individual package one for wine and another one for chocolate, and if all the classes are declared in the package as default access modifier, we are giving package level encapsulation for all classes.
  2. Within a package, if we declare each class filed (member field) as private and having a public method to access those fields, this way giving class level encapsulation to those fields

Yes, it is true that Abstraction and Encapsulation are about hiding.

  • Using only relevant details and hiding unnecessary data at Design Level is called Abstraction. (Like selecting only relevant properties for a class 'Car' to make it more abstract or general.)

  • Encapsulation is the hiding of data at Implementation Level. Like how to actually hide data from direct/external access. This is done by binding data and methods to a single entity/unit to prevent external access. Thus, encapsulation is also known as data hiding at implementation level.


Abstraction: what are the minimum functions and variables that should be exposed to the outside of our class.

Encapsulation: how to achieve this requirement, meaning how to implement it.


Just a few more points to make thing clear,

One must not confuse data abstraction and the abstract class. They are different.

Generally we say abstract class or method is to basically hide something. But no.. That is wrong. What is the word abstract means ? Google search says the English word abstraction means

"Existing in thought or as an idea but not having a physical or concrete existence."

And thats right in case of abstract class too. It is not hiding the content of the method but the method's content is already empty (not having a physical or concrete existence) but it determines how a method should be (existing in thought or as an idea) or a method should be in the calss.

So when do you actually use abstract methods ?

  • When a method from base class will differ in each child class that extends it.
  • And so you want to make sure the child class have this function implemented.
  • This also ensures that method, to have compulsory signature like, it must have n number of parameters.

So about abstract class! - An Abstract class cannot be instantiated only extended! But why ?

  • 추상 메서드가있는 클래스는 그 안에있는 추상 메서드가 의미있는 구현이 없기 때문에 자체 인스턴스를 만들지 못하도록해야합니다.
  • 어떤 이유로 해당 클래스의 인스턴스를 갖는 것이 의미가 적다는 것을 알게되면 클래스 추상을 만들 수도 있습니다.

Abstract 클래스는 새로운 인스턴스를 생성하지 않도록 도와줍니다!

클래스의 추상 메서드는 자식 클래스가 제공된 서명으로 해당 함수를 확실히 구현하도록합니다!

참조 URL : https://stackoverflow.com/questions/15176356/difference-between-encapsulation-and-abstraction

반응형